SalesForceのSOAP APIのJavaクライアントコードを生成


SalesForceのSOAP APIを使用する場合、wsdlファイルからクライアントサイドコードを生成します。
https://developer.salesforce.com/page/Introduction_to_the_Force.com_Web_Services_Connector

ひとつのプログラムで複数のSalesForceインスタンスにSOAP APIでやりとりする場合、インスタンス毎にクライアントサイドコードを生成します。その際に、パッケージ名が重複しないためのやり方の紹介です。

事前準備

基本的には Force.com Web Service Connector (WSC) を参考にするのがよいです。やり方もすこしずつ改善されているので、最新のやり方はここをみるとよいです。

  • mvn
  • jdk
  • git

生成の仕方

  1. force-wsc-x.y.z-uber.jarの作成
  2. wsdlのダウンロード
  3. コード生成

1. force-wsc-x.y.z-uber.jarの作成

まず、wsdlからコードを生成するためのjarをwscのソースからビルドします。

git clone https://github.com/forcedotcom/wsc.git
mvn clean package -Dgpg.skip -DskipTests

gpgの認証やテストが落ちる場合は、上記のようにしてスキップするためのパラメタを渡します。
ビルドが成功したら、target以下に force-wsc-x.y.z-uber.jar というjarが生成されます。

2. wsdlのダウンロード

SalesForceのインスタンスにログインし、設定>開発>APIの画面に遷移します。
そこに、wsdlのダウンロードリンクがあります。色々種類がありますが、通常のデータのやりとりならEnterprise WSDLにすれば困ることはないでしょう。

3. コード生成

com.sforce.ws.tools.wsdlc.java のmainメソッドでコードの生成をしています。微調整のためのシステムプロパティに何があるかはここをみるといいです。

パッケージのプレフィックスをつけるには以下のようにします。

java -Dpackage-prefix=XXX -jar target/force-wsc-x.y.z-uber.jar enterprise.wsdl enterprise-XXX.jar

com.sforce.soap.enterprise.XXX というような、パッケージ構成になります。
あとは生成されるjar毎に別ライブラリとして参照するようにすれば、複数インスタンスのクライアントサイドコードを扱えます。

参考サイト