以前のエントリ「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は以下のページで公開されています。
「https://github.com/forcedotcom/wsc」
ここから、gitにてソースを自分のPCにダウンロードします。
上図の赤囲みのところに、gitのURLが掲載されていますので、それをコピーしてきましょう。
「https://github.com/forcedotcom/wsc.git」
ダウンロードすると、以下のようなディレクトリ構成になります。 srcフォルダ配下のjavaソースと、pom.xmlは、後ほど使用します。
落としてきたソースを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 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 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]
なんだか、最後のゴールでこけたみたいですが、すみません。良く調査していないです。回避方法分かった方は教えてください。。。