Partner WSDLを使用したMaven(Java)プロジェクトの作成方法

## 経緯
Javaからsalesforceに接続する記載が少ないため、備忘録として記載。
## 手順
> 参考サイト：[Java 開発者環境の設定](https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_developer_environment_tipsheet.meta/salesforce_developer_environment_tipsheet/salesforce_developer_environment_overview.htm)
## 前提
1. javaがダウンロードされていること
    > 参考サイト：[Javaダウンロード](https://www.oracle.com/java/technologies/downloads/)
2. Mavenがダウンロードされていること<br>
    - インストール方法
        - Windows: [ダウンロードサイト](https://maven.apache.org/)<br>
        - macOS: コマンド
            ```bash
            $ brew install maven
            $ vi ~/.zprofile
            ```
            ```.zprofile
            # M2_HOMEを作成
            export M2_HOME=/usr/local/Cellar/maven/3.8.1/libexec/<br>
            # PATHの先頭に追加
            export PATH=$M2_HOME/bin:$PATH
            ```
3. 以下のコマンドが起動すること
    ```bash
    $ mvn -v
    Apache Maven 3.8.6 (xxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
    Maven home: /usr/local/Cellar/maven/3.8.6/libexec
    Java version: 18.0.2, vendor: Homebrew, runtime: /usr/local/Cellar/openjdk/18.0.2/libexec/openjdk.jdk/Contents/Home
    Default locale: ja_JP, platform encoding: UTF-8
    OS name: "mac os x", version: "12.5.1", arch: "x86_64", family: "mac"
    ```

## プロジェクトの作成
1. 以下のコマンドにてプロジェクトを作成
    ```bash
    $ mvn archetype:generate \
        -DarchetypeGroupId=com.wsc \
        -DarchetypeArtifactId=wsc \
        -DarchetypeVersion=1.0
    ```
## ライブラリ(jarファイル)のダウンロード
1. ```libs/```フォルダをプロジェクト内部に作成
    ```bash
    $ mkdir libs
    ```
2. 下記のライブラリをダウンロードし```libs/```フォルダに移動
    - [Force WSC](https://mvnrepository.com/artifact/com.force.api/force-wsc)
    - [ANTLR 3 Runtime](https://mvnrepository.com/artifact/org.antlr/antlr-runtime)
    - [StringTemplate 4](https://mvnrepository.com/artifact/org.antlr/ST4)
## WSDLファイルのダウンロード
1. 必要なWSDLファイルを取得 ※例としてPartner(パートナーWSDLの生成)を選択
![スクリーンショット 2022-08-23 15.42.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300749/0a01a475-2401-1a49-5260-1c9841dac5cd.png)
    > 1. ```[設定]```からクイック検索で```API```を検索インテグレーションの```API```を選択。
    > 2. ダウンロード対象のリンクを右クリックし、```リンク先を別名で保存```をクリックして保存。(Macの場合)
    > 3. ダウンロードした```partner.wsdl```を```libs/```フォルダに移動。
2. ```partner.wsdl```から```partner.jar```の作成
    ```bash
    $ cd libs/
    $ java -classpath force-wsc-56.0.0.jar:ST4-4.3.jar:antlr-runtime-3.5.2.jar com.sforce.ws.tools.wsdlc partner.wsdl partner.jar
    ```
## ライブラリ(jarファイル)の読み込み
### ```partner.jar```の読み込み
1. 以下のmvnのコマンドにて生成したライブラリ```partner.jar```をプロジェクトに読み込ませる
    ```bash
    mvn install:install-file -Dfile=libs/partner.jar -DgroupId=com.sforce.soap.partner -DartifactId=partner -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true
    ```
2. 以下をpomファイルの```<dependencies>```に追記
    ```pom.xml
    <dependency>
      <groupId>com.sforce.soap.partner</groupId>
      <artifactId>partner</artifactId>
      <version>1.0</version>
    </dependency>
    ```
### ```force-wsc-XX.X.X.jar```の読み込み
1. 以下のmvnのコマンドにて生成したライブラリ```force-wsc-XX.X.X.jar```をプロジェクトに読み込ませる
    ```
    mvn install:install-file -Dfile=libs/force-wsc-56.0.0.jar -DgroupId=co.ws -DartifactId=ws -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true
    ```
2. 以下をpomファイルの```<dependencies>```に追記
    ```pom.xml
    <dependency>
      <groupId>com.force.api</groupId>
      <artifactId>force-wsc</artifactId>
      <version>56.0.0</version>
    </dependency>
    ```

## 実際に動かしてみる
1. 設定したライブラリをインストール
    ```bash
    $ mvn install
    ```
2. プログラムを作成
    ```App.java
    package wsc;
    
    import com.sforce.soap.partner.Connector;
    import com.sforce.soap.partner.PartnerConnection;
    import com.sforce.ws.ConnectionException;
    import com.sforce.ws.ConnectorConfig;
    
    public class App {
        static final String USERNAME = "*********";
        static final String PASSWORD = "*********";
    
        public static void main(String[] args) {
            printFullName();
        }
    
        public static void printFullName() {
            ConnectorConfig config = new ConnectorConfig();
            config.setUsername(USERNAME);
            config.setPassword(PASSWORD);
    
            try {
                PartnerConnection pc = Connector.newConnection(config);
                String fullName = pc.getUserInfo().getUserFullName();
                System.out.println(fullName);
            } catch (ConnectionException e) {
                e.printStackTrace();
            }
        }
        
    }
    ```
3. プログラムをコンパイル
    ```bash
    $ mvn compile
    ```
4. プロジェクトをパッケージ化
    ```bash
    $ mvn package
    ```
5. プロジェクトを実行(設定)
    ```pom.xml
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <configuration>
        <mainClass>wsc.App</mainClass>
      </configuration>
    </plugin>
    ```
6. プロジェクトを実行
    ```bash
    $ mvn exec:java
    ```

:::note warn
詰まったところ
 - [[セキュリティトークンのリセット] オプションを表示できない](https://help.salesforce.com/s/articleView?id=000331668&type=1)
:::