Seasar DI Container with AOP

S2XML-RPC 基本的な使い方

本ドキュメントはS2XML-RPCについて記述しています。

目次

Webアプリケーションの設定

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.dicons2xmlrpc-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>定義が必要です。