Seasar DI Container with AOP

S2Axis2 JAX-WSの利用

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ファイルを自動生成することも可能です。

詳細については、以下のページを参照してください。