クライアント(Static Stub)の作成
tutorialで作成方法が示されているクライアントコードの種類は
- Static Stub
- Dynamic proxy
- Dynamic invocation interface (DII)
の3つがありますが、とりあえずStatic Stubを追っていきます。
クライアントのソースコードHelloClient.javaを再掲します。コメントを訳しています。
package staticstub; import javax.xml.rpc.Stub; public class HelloClient { private String endpointAddress; public static void main(String[] args) { System.out.println("Endpoint address = " + args[0]); try { Stub stub = createProxy(); stub._setProperty (javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, args[0]); HelloIF hello = (HelloIF)stub; System.out.println(hello.sayHello("Duke!")); } catch (Exception ex) { ex.printStackTrace(); } } private static Stub createProxy() { // 注意:MyHelloService_Impl はJWSDPの実装に特有のものです。 return (Stub) (new MyHelloService_Impl().getHelloIFPort()); } }
次のような内容のコードになっています。
- (Stub) (new MyHelloService_Impl().getHelloIFPort()) でStubオブジェクトを作成します。
コメントにもあるとおり、MyHelloService_Implはwscompileツールで生成された、JWSDPの実装に特有のものです。JAX-RPCの標準ではありません。 - stub._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, args[0])で、エンドポイントのアドレスをセットします。;
エンドポイントのアドレスは、build.propertiesファイルのendpoint.addressで指定します。今回は http://localhost:8080/hello-jaxrpc/hello になっています。 - StubオブジェクトをHelloIF型にキャストします。
- HelloIF型のsayHello()メソッドを呼び出します。
このコードを実行するには、以下のようなステップを踏みます。これも、Antのタスクになっています。
まず、スタブを生成します。これにもwscompileツールを使用します。このとき、WSDLファイルのありかを示すconfig-wsdl.xmlファイルを入力として使います。
<?xml version="1.0" encoding="UTF-8"?> <configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config"> <wsdl location="http://localhost:8080/hello-jaxrpc/hello?WSDL" packageName="staticstub"/> </configuration>
続いて、HelloClient.javaクラスをコンパイルします。
最後に、wscompileによって生成されたクラス(HelloIF.classを含む)とHelloIF.classをまとめてjarファイルにします。
Static Stub方式ではJWSDPの実装だけで通用する個所があり、望ましくありません。そこで、実行時に生成されるDynamic Proxyを使用する方法を使うように変えることにしますが、今日は疲れたのでこのへんで。また明日以降やってみます。