Javaの標準仕様であるJAX-WSを利用することで、POJOのクラスをWebサービスとして公開することが可能となります。
本ドキュメントはS2Axis2 におけるJAX-WSの利用方法について記述しています。
デプロイ対象のサービスクラス
S2Axis2では、デプロイするサービスに@WebSerivceアノテーションが指定されている場合に、JAX-WSのサービスとしてデプロイします。
diconの指定などは、通常のサービスと同様です。 JAX-WSで利用可能なアノテーションの詳細については、JAX-WSのユーザーズガイドを参照してください。
サービスとして公開するクラス
package org.seasar.remoting.axis2.examples.jaxws.ex01;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public class JAXWSEcho {
public JAXWSEcho() {}
@WebMethod
public String echo(int id, String message) {
return "[id = " + id + "] " + message;
}
}
diconでのコンポーネント定義は、通常のサービスクラスと同様です。
dicon(サービス側)
<component class="org.seasar.remoting.axis2.examples.jaxws.ex01.JAXWSEcho">
<meta name="axis-service"/>
</component>
サービスのアドレス
デプロイされたサービスのアドレスは、以下のような形式になります。
http://<host>:<port>/<contextPath>/services/<serviceName>.<serviceClassName>Port
以下のようにアドレスを指定して、WSDLが参照できれば、デプロイに成功しています。
例)
http://localhost:8080/s2axis2-examples/services/JAXWSEchoService.JAXWSEchoPort?wsdl
クライアントの定義についても、通常のサービスにアクセスする場合と同様です(ここでは、実装クラスを直接サービスとして公開しているため、RemotingInterceptorのforceRemoteプロパティをtrueに設定しています)。
ただし、デプロイされているサービス名に合わせてname属性を明示的に指定してください。
dicon(クライアント側)
<include path="s2axis2-client.dicon"/>
<component name="jaxwsRemoting"
class="org.seasar.remoting.common.interceptor.RemotingInterceptor">
<property name="connector">ioConnector</property>
<property name="forceRemote">true</property>
</component>
<component name="JAXWSEchoService.JAXWSEchoPort"
class="org.seasar.remoting.axis2.examples.jaxws.ex01.JAXWSEcho">
<aspect pointcut="echo">jaxwsRemoting</aspect>
</component>
また、Java SE 6(Mustang)からはJAX-WSが標準で搭載されており、それに対応したツールも付属しています。
S2Axis2では、AOPを利用して、JAX-WSを特に意識することなく簡単にサービスを呼び出すことが可能ですが、
それらのツールを利用することで、デプロイ対象のサービスクラスから、サービスを呼び出すのに必要なソースやWSDLファイルを自動生成することも可能です。
詳細については、以下のページを参照してください。
|