« svndumpfilter&mkdir | Main | Teeda&S2XML-RPC(2) »

2007.09.25

Teeda&S2XML-RPC(1)

 Teedaの環境にS2XML-RPCを追加してみました。通常はブラウザからのアクセスを前提としていながら(Teeda側)、専用のクライアントからのアクセスも受け付ける(XML-RPC)といったようなアプリケーションを想定。

 使用したバージョンは、S2.4.17 + Teeda1.0.11-RC2-SNAPSHOT + S2XML-RPC0.3.0 + S2Remoting1.1.0 + Apache XML-RPC 3.1の組み合わせ。各アーカイブファイルに含まれているs2xmlrpc-0.3.0.jars2remoting-1.1.0.jarxmlrpc-client-3.1.jarxmlrpc-common-3.1.jarxmlrpc-server-3.1.jarws-commons-util-1.0.2.jarの6つのjarファイルを、webapps用のクラスパスに追加。実際には不要なjarファイルもあるのかもしれませんが、精査は行っていません(^^;

 S2XML-RPC 基本的な使い方では、org.seasar.framework.container.servlet.S2ContainerServletorg.seasar.remoting.xmlrpc.servlet.S2XmlRpcServletをロードする設定例が記載されていますが、Teedaの環境ではorg.seasar.teeda.core.webapp.TeedaServletが既にロードされています。

 クラスの継承関係を調べてみると、TeedaServletはS2ContainerServletを継承しているので、TeedaServletのロードでも問題ないはず・・・ってことで、Teedaを動作させているweb.xmlに対して追加したのは以下の内容。S2XmlRpcServletはS2ContainerServletより後に起動する必要があるとのことで、load-on-startup属性は指定していません(というか、設定例のページのまんまなのですが)。もしかしたら、/s2servletに対するマッピングは不要なのかもしれません。

<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>teedaServlet</servlet-name>
 <url-pattern>/s2servlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>XmlRpcServlet</servlet-name>
 <url-pattern>/xmlrpc</url-pattern>
</servlet-mapping>

 XML-RPCで公開するためのクラスとして以下のinterfaceおよびclassを作成。

package test3.test;
public interface RpcTest {
 public String getResult1(String a, int b);
 public String[] getResult2(String a, int b);
}

package test3.test;
public interface RpcTest2 {
 public int multiply(int a, int b);
 public int add(int a, int b);
}

package test3.test.impl;
import test3.test.RpcTest;
public class RpcTestImpl implements RpcTest {
 public String getResult1(String a, int b) {
  StringBuilder result = new StringBuilder();
  for (int i=0; i<b; i++) {
   result.append(a).append(',');
  }
  return result.toString();
 }
 public String[] getResult2(String a, int b) {
  String[] result = new String[b];
  for (int i=0; i<b; i++) {
   result[i] = a + "-" + Integer.toString(i);
  }
  return result;
 }
}

package test3.test.impl;
import test3.test.RpcTest2;
public class RpcTest2Impl implements RpcTest2 {
 public int add(int a, int b) {
  return a+b;
 }
 public int multiply(int a, int b) {
  return a*b;
 }
}

XML-RPCで公開するコンポーネントを登録するためのdiconファイルを作成(test.diconという名前で保存)。

<components>
 <component name="test" class="test3.test.impl.RpcTestImpl">
  <meta name="xmlrpc" />
 </component>
 <component name="test2" class="test3.test.impl.RpcTest2Impl">
  <meta name="xmlrpc" />
 </component>
</components>

XML-RPCを公開するため、app.diconファイルを修正。以下の2行をapp.diconに追加。

<include path="s2xmlrpc.dicon"/>
<include path="test.dicon" />

サーバ側の準備はここまで。これに対するアクセスのテスト(クライアント側の作成)はまた後日・・・。

|

« svndumpfilter&mkdir | Main | Teeda&S2XML-RPC(2) »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Teeda&S2XML-RPC(1):

« svndumpfilter&mkdir | Main | Teeda&S2XML-RPC(2) »