まずはサンプルコード
SoapBindingStub soapBinding = (SoapBindingStub)new SforceServiceLocator().getSoap();
soapBinding._setProperty(org.apache.axis.transport.http.HTTPConstants.MC_ACCEPT_GZIP , "true");
soapBinding._setProperty(org.apache.axis.transport.http.HTTPConstants.MC_GZIP_REQUEST , "true");
soapBinding._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "https://login.salesforce.com/services/Soap/u/39.0");
//httpプロキシを指定する
{
Properties systemprops = System.getProperties();
systemprops.setProperty("http.useProxy", "true");
systemprops.setProperty("http.proxyHost", "samplehost");
systemprops.setProperty("http.proxyPort", "9999");
systemprops.setProperty("http.proxyUser", "sampleproxyuser");
systemprops.setProperty("http.proxyPassword", "sampleproxypasword");
}
LoginResult loginResult = soapBinding.login("sampleuser@sample.username", "samplepassword");
String serverUrl = loginResult.getServerUrl();
soapBinding._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, serverUrl);
SessionHeader sh = new SessionHeader();
sh.setSessionId(loginResult.getSessionId());
soapBinding.setHeader((new SforceServiceLocator()).getServiceName().getNamespaceURI(), "SessionHeader", sh);
System.out.println(soapBinding.getServerTimestamp().getTimestamp());
コードの生成とライブラリの作成
axis1.4のライブラリとcommonshttp3.1のライブラリを手に入れます。
ダウンロードサイトが見つからない場合はこちらにアップロードしました。(いいのかなこれ、何か問題ありましたら教えてください。)
axis1.4のライブラリへクラスパスを指定し次のコマンドでコードをジェネレートします。
set classpath=..lib*
java -cp %classpath% org.apache.axis.wsdl.WSDL2Java -a partner.wsdl
出力されたファイルをコンパイルし、実行時にaxis1.4のライブラリと共にクラスパスに含めます。
httpproxyの設定
通信時にhttpproxyを使う場合は、次のようにシステムプロパティをセットします。システムプロパティなので、javaコマンドの引数からも指定可能です。
Properties systemprops = System.getProperties();
systemprops.setProperty("http.useProxy", "true");
systemprops.setProperty("http.proxyHost", "samplehost");
systemprops.setProperty("http.proxyPort", "9999");
systemprops.setProperty("http.proxyUser", "sampleproxyuser");
systemprops.setProperty("http.proxyPassword", "sampleproxypasword");
エンドポイントの設定
本番やSandBoxのapiのエンドポイントを指定します。何も指定しないと、wsdlに記載のものを使います。
soapBinding._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "https://login.salesforce.com/services/Soap/u/39.0");
インスタンスURLとセッションIDのセット
login後に、セッションIDとインスタンスURLが返却されます。インスタンスURLでエンドポイントを再設定し、セッションIDをSOAP Headerにセットします。
String serverUrl = loginResult.getServerUrl();
soapBinding._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, serverUrl);
SessionHeader sh = new SessionHeader();
sh.setSessionId(loginResult.getSessionId());
soapBinding.setHeader((new SforceServiceLocator()).getServiceName().getNamespaceURI(), "SessionHeader", sh);
transportにhttpcommons3を使う
axis1.4の標準のtransportはaccept-Encodingでgzipに対応していないので、httpcommons3を使うように変更します。
client-config.wsddファイルに次の記載をします。
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
</globalConfiguration>
<transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>
<transport name="https" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>
<transport name="local" pivot="java:org.apache.axis.transport.local.LocalSender"/>
<transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender"/>
</deployment>
-Daxis.ClientConfigFile=client-config.wsdd
を指定します。
以上を行うことで、上記コードのsoapBindingは、Salesforce APIとやりとりができる状態になります。