menu
書いてる野郎
orebike@gmail.com
ほぼ誰も作ってないので・・・
JavaでSOAPクライアントを実装するには Apache Axis2 というのが有名らしいのでこれを使う
こいつがどの程度何に依存性があるのかよくわからん
とりあえずこれで動いているのでよしとする
<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>
ここからダウンロード。解凍する。中に
bin/wsdl2java.sh
というツールがあるのでこいつを使ってWSDLの定義からJavaコードを生成する
パスとか使うの面倒なのでその場で丼
$ ./wsdl2java.sh -uri https://sandbox.hoge.piyo.jp/fuga/V1.2.3/unko.wsdl
な感じでWSDLの位置を教えて使う。そうすると自動的にパッケージが作られてそこにソースコードが格納される
わかっていると思うが WSDL というのは API のインターフェースを定義するコードである。
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に定義されていると思われるのでメソッドが生成されているのでそれっぽいものを使えばよいだろう。
String requestXml = UnkoStub._getServiceClient().getLastOperationContext().getMessageContext("Out").getEnvelope().toString()); String responseXml = UnkoStub._getServiceClient().getLastOperationContext().getMessageContext("In").getEnvelope().toString());