本ドキュメントはS2Axis-1.0.3 について記述しています.旧バージョンについては該当バージョンの配布ファイルに含まれているドキュメントを参照してください.
S2Axisを使用するには,AxisおよびS2をweb.xml に設定する必要があります.AxisおよびS2の設定の詳細はそれぞれのドキュメントを参照してください.
S2AxisはS2コンテナの初期化時にコンポーネントをAxisに登録します.このため,S2よりも先にAxisが初期化されている必要があります.そのためには,Axisが提供するサーブレットのload-on-startup をS2よりも小さくします.
以下はS2AxisExamplesに含まれているweb.xml です.このサンプルでは,Axisのload-on-startup を10,S2のload-on-startup を20に設定しています.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"
>
<web-app>
<display-name>S2AxisExamples</display-name>
<filter>
<filter-name>s2filter</filter-name>
<filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>s2filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<display-name>Axis Admin Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AdminServlet
</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<display-name>SOAPMonitorService</display-name>
<servlet-class>
org.apache.axis.monitor.SOAPMonitorService
</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet>
<servlet-name>s2servlet</servlet-name>
<display-name>s2servlet</display-name>
<servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
<init-param>
<param-name>configPath</param-name>
<param-value>app.dicon</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>20</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<!-- uncomment this if you want the admin servlet -->
<!--
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
-->
<servlet-mapping>
<servlet-name>s2servlet</servlet-name>
<url-pattern>/s2servlet</url-pattern>
</servlet-mapping>
<session-config>
<!-- Default to 5 minute session timeouts -->
<session-timeout>5</session-timeout>
</session-config>
<!-- currently the W3C havent settled on a media type for WSDL;
http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
for now we go with the basic 'it's XML' response -->
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<welcome-file-list id="WelcomeFileList">
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
s2-axis.dicon ファイルのインクルード
S2Axisを使用するサーバ側では,app.dicon ファイルの中でs2-axis.dicon ファイルをインクルードします.
<components>
<include path="s2-axis.dicon"/>
・・・
</components>
s2-axis.dicon はs2axis-1.0.1.jar の中に含まれているため,ロケーションを気にする必要はありません.
サービスのデプロイ
コンポーネントをWebサービスとしてAxisにデプロイするには,そのコンポーネントの<component> 要素の子として<meta> 要素を指定します.
<component name="Echo" class="org.seasar.remoting.axis.examples.ex01.EchoImpl">
<meta name="axis-service"/>
</component>
<meta> 要素の内容にWSDDファイルを指定した場合 (後述) を除いて,<component> 要素のname 属性は必須です.公開されるサービスのURLは次のようになります.
- diconファイルに名前空間が指定されていない場合
context-path/services/name
- diconファイルに名前空間が指定されている場合
context-path/services/namespace/name
サービス定義
<meta> 要素の内容にorg.seasar.remoting.axis.server.ServiceDef を設定することにより,いくつかの設定を行うことが出来ます.
<component name="Hello" class="org.seasar.remoting.axis.examples.ex02.HelloImpl">
<meta name="axis-service">
<component class="org.seasar.remoting.axis.server.ServiceDef">
<property name="serviceType">
@org.seasar.remoting.axis.examples.ex02.Hello@class
</property>
</component>
</meta>
<property name="...">・・・</property>
</component>
org.seasar.remoting.axis.server.ServiceDef のプロパティについては,クイックリファレンスの
「org.seasar.remoting.axis.ServiceDef」を参照してください.
タイプマッピング定義
Axisを使う場合,アプリケーション独自のJavaBeansなど,JAX-RPCで定められていない型をサービスの引数や戻り値として使う場合にはSerializer / Deserializer を指定する必要があります.S2Axisでは,Axisが提供するタイプマッピングの自動登録を有効に設定するので,特別なSerializer / Deserializer が必要な場合を除いて明示的に登録する必要はありません.
特別なSerializer / Deserializer を使う場合や,Java型のパッケージとXML型の名前空間の対応を指定したい場合には,タイプマッピングを登録します.
ServiceDef にはタイプマッピングを複数登録することが出来ます.
<component name="Hello" class="org.seasar.remoting.axis.examples.ex02.HelloImpl">
<meta name="axis-service">
<component class="org.seasar.remoting.axis.server.ServiceDef">
<initMethod name="addTypeMapping">
<arg>
<component class="org.seasar.remoting.axis.TypeMappingDef">
<property name="...">・・・</property>
</component>
</arg>
</initMethod>
</component>
</meta>
<property name="...">・・・</property>
</component>
org.seasar.remoting.axis.TypeMappingDef のプロパティについては,クイックリファレンスの
「org.seasar.remoting.axis.TypeMappingDef」を参照してください.
WSDDによるサービスのデプロイ
WebサービスのWSDLがあり,AxisのWSDL2Javaを使用してJavaの実装クラスを作成した場合には,WSDL2Javaが生成したdeploy.wsdd を指定してサービスをデプロイすることが出来ます.
<component name="Magazine" class="org.seasar.remoting.axis.examples.ex05.MagazineSoapBindingImpl">
<meta name="axis-service">"org/seasar/remoting/axis/examples/ex05/deploy.wsdd"</meta>
・・・
</component>
この場合,WSDL2Javaを実行する際に指定されたJava型とXML型とのタイプマッピングがdeploy.wsdd に含まれているので,必要なタイプマッピングが全てデプロイされます.
WSDDはサービス定義 (<service>要素) を一つだけ含むことができます.複数のサービス定義を含んでいる場合はデプロイに失敗します.
S2Axisを使うことで,Webサービスをコンポーネントとして使用することが出来ます.
動的呼び出し
Javaインタフェースを使用してサービスを呼び出すには,diconファイルを次のように記述します.
<!-- Webサービスのプロキシ -->
<component name="Echo" class="org.seasar.remoting.axis.examples.ex01.Echo">
<aspect>remoting</aspect>
</component>
<!-- リモート呼び出しのインターセプタ -->
<component name="remoting" class="org.seasar.remoting.common.interceptor.RemotingInterceptor"/>
<!-- Axisコネクタ -->
<component name="connector" class="org.seasar.remoting.axis.connector.AxisConnector">
<property name="baseURL">
"http://localhost:8080/s2-axis-examples/services/"
</property>
</component>
<!-- Axisサービス -->
<component class="org.apache.axis.client.Service" autoBinding="none"/>
呼び出すWebサービスごとにプロキシが必要です.プロキシの<component> 要素のclass 属性にはWebサービスのJavaインタフェースを指定します.このコンポーネントにはRemotingInterceptor をアスペクトとして指定します.プロキシはWebサービスのインタフェースごとに一つの<component> 定義が必要です.
RemotingIntercepto rはプロキシのメソッド呼び出しを横取りし,Axisコネクタを呼び出します.上の例では,S2の自動バインディングによりRemotingInterceptorのプロパティにAxisコネクタが設定されています.RemotingInterceptorは,Axisコネクタごとに一つの<component> 定義が必要です.
AxisコネクタはAxisサービスを通じてWebサービスを呼び出します.上の例では,S2の自動バインディングによりAxisコネクタのプロパティにAxisサービスが設定されています.baseURLプロパティには,WebサービスのエンドポイントのベースURLを指定します.このベースURLにプロキシの<component>要素のname属性で指定された名前を付加したURLが実際の通信で使用されます.AxisコネクタはWebサービスのエンドポイントごとに一つの<component> 定義が必要です.
AxisサービスはSOAP等のプロトコルを使用して実際にWebサービスと通信します.Axisサービスは少なくともS2コンテナごとに一つの<component>定義が必要です.
タイプマッピング定義
Axisを使う場合,アプリケーション独自のJavaBeansなど,JAX-RPCで定められていない型をサービスの引数や戻り値として使う場合にはSerializer / Deserializer を指定する必要があります.S2Axisでは,Axisが提供するタイプマッピングの自動登録を有効に設定するので,特別なSerializer / Deserializer が必要な場合を除いて明示的に登録する必要はありません.
特別なSerializer / Deserializer を使う場合や,Java型のパッケージとXML型の名前空間の対応を指定したい場合には,タイプマッピングを登録します.
AxisConnector にはタイプマッピングを複数登録することが出来ます.
<component name="connector" class="org.seasar.remoting.axis.connector.AxisConnector">
<property name="baseURL">
"http://localhost:8080/s2-axis-examples/services/"
</property>
<initMethod name="addTypeMapping">
<arg>
<component class="org.seasar.remoting.axis.TypeMappingDef">
<property name="...">・・・</property>
</component>
</arg>
</initMethod>
</component>
</component>
org.seasar.remoting.axis.TypeMappingDef のプロパティについては,クイックリファレンスの
「org.seasar.remoting.axis.TypeMappingDef」を参照してください.
静的呼び出し
WSDLから生成されたスタブを使用してサービスを呼び出すには,diconファイルを次のように記述します.
<component class="org.seasar.axis.examples.ex05.Magazine">
locator.getMagazine()
</component>
<component name="locator" class="org.seasar.axis.examples.ex05.MagazineServiceLocator"/>
サービスロケータはWSDL2Javaにより生成されるクラスです.このクラスのメソッドgetXxx() によりサービスのJavaインタフェースを実装したスタブを取得することが出来ます.
s2-axis.dicon ファイルのインクルード
以下の機能を使用する場合は,サーバ側だけでなくクライアント側でも,app.dicon ファイルの中でs2-axis.dicon ファイルをインクルードします.
<components>
<include path="s2-axis.dicon"/>
・・・
</components>
s2-axis.dicon はs2axis-1.0.1.jar の中に含まれているため,ロケーションを気にする必要はありません.
ハンドラのデプロイ
サービスだけでなく,ハンドラもS2でインスタンス管理することが出来ます.
<component name="fooRequestHandler" class="org.seasar.remoting.axis.examples.ex06.LoggingHandler">
<meta name="axis-handler"/>
・・・
</component>
<component> 要素のname 属性は必須です.ハンドラチェーンの定義などでは,この名前を指定してハンドラを参照することが出来ます.
WSDDのデプロイ
任意のWSDDファイルをS2Axisでデプロイすることが出来ます.
<components>
<meta name="axis-deploy">"org/seasar/remoting/axis/examples/ex07/deploy.wsdd"</meta>
</components>
これは,AxisのAdminClientによるデプロイと同等ですが,S2の初期化時に自動的にデプロイされます.
Axisエンジンの指定
サービスやハンドラ,WSDDファイルをデプロイする対象となるAxisエンジンをdiconファイルごとに指定することが出来ます.
<components>
<meta name="axis-engine">"default-client"</meta>
</components>
<meta> 要素の内容に指定した文字列よりAxisエンジンが決定されます.
詳細はクイックリファレンスの「service-engineに指定できる内容」を参照してください.
|