Java/SOAPクライアントを作る

Java/SOAPクライアントを作る

ほぼ誰も作ってないので・・・

JavaでSOAPクライアントを実装するには Apache Axis2 というのが有名らしいのでこれを使う

Maven

こいつがどの程度何に依存性があるのかよくわからん

とりあえずこれで動いているのでよしとする

<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-transport-http</artifactId>
    <version>1.6.2</version>
</dependency>
<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-transport-local</artifactId>
    <version>1.6.2</version>
</dependency>
<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-kernel</artifactId>
    <version>1.6.2</version>
</dependency>
<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2</artifactId>
    <version>1.6.2</version>
</dependency>

WSDLからのJavaコード自動生成

Apache Axis2 - Releases

ここからダウンロード。解凍する。中に

bin/wsdl2java.sh

というツールがあるのでこいつを使ってWSDLの定義からJavaコードを生成する

パスとか使うの面倒なのでその場で丼

$ ./wsdl2java.sh -uri https://sandbox.hoge.piyo.jp/fuga/V1.2.3/unko.wsdl

な感じでWSDLの位置を教えて使う。そうすると自動的にパッケージが作られてそこにソースコードが格納される

わかっていると思うが WSDL というのは API のインターフェースを定義するコードである。

テストに使う SOAP 対応のサービス

http://www.webservicex.net/New/ このサービスがいろいろなデータを SOAP で提供してくれているので、こいつを実験台に使うといいだろう。

使う

UnkoStub stub = new UnkoStub();
UnkoStub.Get get =  new UnkoStub.Get();
get.setHogeId(12345);
UnkoStub.RequestHeader rHeader = new UnkoStub.RequestHeader();
UnkoStub.SoapHeader sHeader = new UnkoStub.SoapHeader();
sHeader.setAccountId("unko");
sHeader.setPassword("unko12345");
rHeader.setRequestHeader(sHeader);
UnkoStub.GetResponse res = stub.get(get, rHeader);
System.out.println(res.getVal());

これは例。実際はWSDLによってイロイロメソッド名やらが変わるが、大体の流れは一緒。

StubをトップとするクラスをベースにWSDLで定義されているメソッドがJavaのクラスとして表現される。 そのメソッドにあたるインスタンスを作成してパラメータをセットしてあげるというのが流れ。

最後に Stub のメソッドにメソッドに与えるパラメータを全部渡して実行する。

サービス独自の認証が必要な場合は↑のように RequestHeader みたいなものに詰めて使うことになると思われる。 このへんもWSDLに定義されていると思われるのでメソッドが生成されているのでそれっぽいものを使えばよいだろう。

オリジナルの生の XML を得る

String requestXml = UnkoStub._getServiceClient().getLastOperationContext().getMessageContext("Out").getEnvelope().toString());
String responseXml = UnkoStub._getServiceClient().getLastOperationContext().getMessageContext("In").getEnvelope().toString());

Tag

java/make_soap_client.txt · 最終更新: 2018-12-14 16:38 by ore