Salesforceの最新APIのWSC(Web Service Connector)のjarファイルをコンパイルして使用する

以前のエントリ「Salesforceに接続して、オブジェクト加工等を行うEclipseプロジェクトのテンプレート」でご紹介しましたが、SalesforceのAPIをWebService経由でJavaから呼び出すには、Salesforceから取得した WSDLファイルが必要です。

「WSDLファイル」とは、Webサービスの呼び出し情報を定義したXMLファイルで、このファイルからJavaなどのプログラミング言語に応じたクラスを生成して、 そのクラスを使用してAPIの呼び出しを行います。

クラス群の生成は、

“C:\Program Files\Java\jdk1.7.0_79\bin\java” -classpath wsc-23.jar com.sforce.ws.tools.wsdlc partner.wsdl partner.jar

のようなコマンドで生成し、呼び出すAPIごとに生成してjarにまとめ、「enterprise.jar」「partner.jar」「metadata.jar」「tooling.jar」 などを作成して利用します。

さて、上記のコマンドで「wsc-23.jar」とあるのが、クラスファイルを生成するのに必要なライブラリなのですが、 23とはいささか古いですよね。

Salesforceは、常にバージョンアップが行われていて、このエントリを書いた2016年12月はAPIバージョンは38が最新です。 その間に、新しいオブジェクトのタイプが追加されたり、構造が変わったりしているので、WSDLファイルに記述されている内容も変化しています。

つまり、最新のバージョンに対応したwscファイルでクラスファイルを生成しなければ、使えない機能があったり、APIを呼び出しても、エラーに なったりすることがあるということです。

そのため、最新のAPIバージョンでwscを生成する手順をメモしておきます。

最新のwsc.jarの作り方

wscのソースファイルをダウンロードしてくる

まずは、最新のバージョンに対応したソースファイルをダウンロードします。 最新のwscは以下のページで公開されています。

「https://github.com/forcedotcom/wsc」

ここから、gitにてソースを自分のPCにダウンロードします。

上図の赤囲みのところに、gitのURLが掲載されていますので、それをコピーしてきましょう。

「https://github.com/forcedotcom/wsc.git」

ダウンロードすると、以下のようなディレクトリ構成になります。 srcフォルダ配下のjavaソースと、pom.xmlは、後ほど使用します。

Mavenでコンパイルする

落としてきたソースをEclipseのMavenプロジェクトでコンパイルし、jarファイルを作りましょう。さきほど、「pom.xml」というファイルがありましたが、これは、Mavenを使って「コンパイル→jarへのまとめ」を行う設定ファイルです。

そのために、EclipseでMavenプロジェクトを作成しました。

上記の手順でシンプルなMavenプロジェクトを作ると、以下のようなディレクトリ構成のプロジェクトができます。この、src配下とpom.xmlをgitからダウンロードしたものに置き換えます。

ここまできたら、いよいよコンパイルします。プロジェクトを右クリックし、「Maven build..」を選んで、Goals(ゴール)を「package」に設定します。「Skip Tests」にもチェックを入れておくと良いでしょう。

上記のようなjarファイル群ができていたらOKです。使用するのは、「force-wsc-38.0.4-uber.jar」になりますので、これができていたらOKです。

いくつか起こりえるエラー

まぁ、すんなり行けばいいですが、それは、何度もエラーが出るのが世の常。私もいくつかエラーでました。同じことをする方も引っかかるかもしれないので、メモしておきます。

Mavenプロジェクトのコンパイルエラー

MavenプロジェクトでMaven buildすると以下のようなエラーが出る場合があります。

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.272 s
[INFO] Finished at: 2016-12-01T14:01:03+09:00
[INFO] Final Memory: 7M/17M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project wsc38: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR] -> [Help 1]

これは、「コンパイルできないけど、jdkじゃないんじゃないの?」といわれていますね。私の場合は、Eclipse出指定されているjavaのJAVA_HOME\bin配下にjavac.exeがない「jre」を指定していたためでした。同じエラーが出る方は、ちゃんとjdkを指定していて、javacが含まれているかを確認してみましょう。

Mavenプロジェクトの最後のパッケージングエラー

Maven buildが最後の最後でエラーになっています。私は、「force-wsc-38.0.4-uber.jar」が出来ていたのでよしとしましたが。。。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:30 min
[INFO] Finished at: 2016-12-01T14:25:03+09:00
[INFO] Final Memory: 23M/367M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.2:sign (sign-artifacts) on project force-wsc: Cannot obtain passphrase in batch mode -> [Help 1]

なんだか、最後のゴールでこけたみたいですが、すみません。良く調査していないです。回避方法分かった方は教えてください。。。