SOAPは通信手順
SOAPは、「Simple Object Access Protocol」の略です。すなわち、「シンプルなオブジェクトアクセスのプロトコル」ということになります。このサンプルの例では、「MyService」がオブジェクトに当たります。そして、「Client」がSOAPをしゃべることでMyServiceにアクセスします。
では、MyServiceはSOAPをしゃべることができるのでしょうか?
ここで、MyServiceクラスのソースコード(MyService.java)を確認してみましょう。ソースコードは以下のディレクトリにあります。
<AXIS_HOME>\samples\userguide\example3
package samples.userguide.example3; public class MyService { public String serviceMethod(String arg) { return arg; } }
●MyService.java
これを見ると分かりますが、単なるJavaクラスであり、Javaの標準API以外は利用していません。すなわち、このMyServiceクラスはそのままではSOAPをしゃべることができません。
これでもうお分かりだと思いますが、サーバ側でSOAPをしゃべっているのはAxisServletです。AxisServletはSOAPをしゃべり、クライアントからの要求に応じてサービスを動かす役目を持っています。まさにAxisServletはSOAPによるサービスを提供するサーバプログラムです。
一方、同じディレクトリにあるClientプログラムも見てみましょう。
package samples.userguide.example3; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.utils.Options; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; public class Client { public static void main(String [] args) { try { Options options = new Options(args); String endpointURL = options.getURL(); String textToSend; args = options.getRemainingArgs(); if ((args == null) || (args.length < 1)) { textToSend = "<nothing>"; } else { textToSend = args[0]; } Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpointURL) ); call.setOperationName( new QName("MyService", "serviceMethod") ); call.addParameter( "arg1", XMLType.XSD_STRING, ParameterMode.IN); call.setReturnType( org.apache.axis.encoding.XMLType.XSD_STRING ); String ret = (String) call.invoke( new Object[] { textToSend } ); System.out.println("You typed : " + ret); } catch (Exception e) { System.err.println(e.toString()); } } }
●Client.java
こちらはSOAPをしゃべりますので、Axis関連のパッケージをインポートし、Callクラス等を駆使してSOAPをしゃべっています。このクライアントの書き方については今後詳しく解説します。
Copyright © ITmedia, Inc. All Rights Reserved.