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.