本ドキュメントはS2XML-RPC について記述しています。
S2XML-RPCを使用するには、S2XmlRpcServletおよびS2をweb.xml に設定する必要があります。S2XmlRpcServletはApache XML-RPCのXmlRpcServletを継承したクラスです。XML-RPCのXmlRpcServletおよびS2の設定の詳細はそれぞれのドキュメントを参照してください。
S2XmlRpcServletは初期化時にS2コンポーネントをS2XmlRpcServletに登録します。そのためには、S2が提供するサーブレットのload-on-startup を指定して、S2XmlRpcServletのload-on-startup は指定しない設定とします。
以下はS2XML-RPCExamplesに含まれているweb.xml です。このサンプルでは、S2のload-on-startup を1、S2XmlRpcServletのload-on-startup を未設定に設定しています。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<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>
<servlet>
<servlet-name>s2servlet</servlet-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>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>XmlRpcServlet</servlet-name>
<servlet-class>org.seasar.remoting.xmlrpc.servlet.S2XmlRpcServlet</servlet-class>
<init-param>
<param-name>enabledForExtensions</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>s2servlet</servlet-name>
<url-pattern>/s2servlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XmlRpcServlet</servlet-name>
<url-pattern>/xmlrpc</url-pattern>
</servlet-mapping>
</web-app>
s2xmlrpc.dicon ファイルのインクルード
S2XML-RPCを使用するサーバ側では、app.dicon ファイルの中でs2xmlrpc.dicon ファイルをインクルードします。
<components>
<include path="s2xmlrpc.dicon"/>
・・・
</components>
s2xmlrpc.dicon はs2xmlrpc-x.x.x.jar の中に含まれているため、ロケーションを気にする必要はありません。
サービスのデプロイ(コンポーネント定義)
S2コンテナで管理しているコンポーネントをXML-RPCとして公開(デプロイ)するには、そのコンポーネントの<component> 要素の子として<meta> 要素を指定します。
<component name="Echo" class="org.seasar.remoting.xmlrpc.examples.ex01.EchoImpl">
<meta name="xmlrpc"/>
</component>
<component> 要素のname 属性(コンポーネント名)は必須です。公開されるURIとメソッド名は次のようになります。
- URI
context-path/xmlrpc
- メソッド名
name(コンポーネント名).コンポーネントのメソッド名
S2XML-RPCを使うことで、XML-RPCをコンポーネントとして使用することが出来ます。
Javaインタフェースを使用してサービスを呼び出すには、diconファイルを次のように記述します。(例:S2XML-RPCExamplesのs2xmlrpc-client.dicon)
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components>
<component name="remoting"
class="org.seasar.remoting.common.interceptor.RemotingInterceptor">
<property name="connector">connector</property>
</component>
<component name="connector"
class="org.seasar.remoting.xmlrpc.connector.XmlRpcConnector">
<property name="baseURL">baseURL</property>
</component>
<component name="baseURL" class="java.net.URL" autoBinding="none">
<arg>"http://localhost:8080/s2xmlrpc-examples/xmlrpc"</arg>
</component>
</components>
呼び出すコンポーネントごとにプロキシが必要です。プロキシの<component> 要素のclass 属性にはXML-RPCにマッチするのJavaインタフェースを指定します。このコンポーネントにはRemotingInterceptor をアスペクトとして指定します。プロキシはXML−RPCのインタフェースごとに一つの<component> 定義が必要です。
RemotingInterceptor はプロキシのメソッド呼び出しを横取りし、XML-RPCコネクタを呼び出します。上の例では、S2の自動バインディングによりRemotingInterceptorのプロパティにXML-RPCコネクタが設定されています。RemotingInterceptorは、XML-RPCコネクタごとに一つの<component> 定義が必要です。
XML-RPCコネクタはXML-RPCを呼び出します。baseURLプロパティには、XML-RPCのURLを指定します。XML-RPCコネクタはXML-RPCのURIごとに一つの<component> 定義が必要です。
|