S2Axisを使ってみました

S2JSFで開発中のWebアプリケーションにS2Axis2を適用しました。

目的はS2JSF(Webアプリ)とS2AxisWebサービス)から同じLogic(Service)やDaoを利用したいから。

簡単にWebサービスが公開できるというのを確認しました。すごくいいです。
簡単すぎます。「Axis2って何?」って感じです(ヤバイ?)

とりあえず手順メモ

S2Axis2のWebページを見る
http://s2axis.seasar.org/ja/s2axis2/index.html

Apache Axis2というのをベースにしたものが最新。
バージョンはまだ0.1.0。アツくなりそうな感じがします...

2.まずはexampleの動作を確認する。
自分の環境のJDKやらTomcatやらが適合しているかのチェックにはコレ重要。

手順どおり進めたつもりでいたが、
http://localhost:8080/s2axis2-examples/services/Echo?wsdl
にアクセスしたところで例外が出てしまった。

例外

javax.servlet.ServletException: サーブレットの実行により例外を投げました
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:60)

原因
javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
org.apache.ws.commons.schema.XmlSchema.serialize_internal(XmlSchema.java:214)
org.apache.ws.commons.schema.XmlSchema.write(XmlSchema.java:200)
org.apache.axis2.description.AxisService2OM.generateOM(AxisService2OM.java:147)
org.apache.axis2.description.AxisService.getWSDL(AxisService.java:553)
org.apache.axis2.description.AxisService.printWSDL(AxisService.java:533)
org.apache.axis2.transport.http.ListingAgent.processListService(ListingAgent.java:144)
org.apache.axis2.transport.http.ListingAgent.handle(ListingAgent.java:89)
org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:109)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:60)

メッセージを良く見る。

org.apache.xalan.processor.TransformerFactoryImpl not found

どうもxalan(XML処理エンジンでしたっけ?)が不足しているようなので、
公式サイトからダウンロード。
http://xml.apache.org/xalan-j/
からDL。
http://www.meisei-u.ac.jp/mirror/apache/dist/xml/xalan-j/xalan-j_2_7_0-bin-2jars.zip

解凍後に見えたすべてのJarをexampleの
s2axis2-examples\WebContent\WEB-INF\lib
に投入。今度は正常にWSDLが出た。

雰囲気はつかんだので、ここからS2JSFとの統合に入る。

[S2Axis2 基本的な使い方]
http://s2axis.seasar.org/ja/s2axis2/guide.html
を参考にWebアプリに組み込んでみる。
ここでいうWebアプリはS2JSFベースの独自アプリ。

S2Axisで使っているコンポーネントのうち、どれを
web-inf/libに何を移したらいいのか良く分からないので整理。

S2Axisのページにはこう書いてある。

1.JDK (J2SE SDK) 1.4以降が必要です.S2Axis2-V0.1.0の開発とテストはJDK 1.4.2_08で行っています.ダウンロードはこちら。
2.S2の2.3.7以降が必要です。S2Axis2-V0.1.0の開発とテストはS2.3.7で行っています。ダウンロードはこちら。
3.S2Remotingの1.0.0以降が必要です。S2Axis2-V0.1.0の開発とテストはS2Remoting-V1.0.0で行っています。ダウンロードはこちら。
4.Axis2の1.0以降が必要です。S2Axis2-V0.1.0の開発とテストはAxis2 1.0で行っています。 (S2Axis2に同梱されています)。ダウンロードはこちら。
5.Servlet2.3以降をサポートしたWebコンテナが必要です。S2Axis2-V0.1.0の開発とテストは、Tomcat 5.5.9で行っています。ダウンロードはこちら。

ここでexampleが動いていることから、1と2と5は無視。
s2axis2-0.1.0.jarはS2Axis2本体なので当然入る。
3については、 s2remoting-1.0.1.jar が相当しそうなので抜き取る。

2が問題。どれを取ったらいいのか分からないので、とりあえずAxis2のサイトからAxis2本体をDLして適用した。
その中身一覧

annogen-0.1.0.jar
axiom-api-1.0.jar
axiom-dom-1.0.jar
axiom-impl-1.0.jar
axis2-adb-1.0.jar
axis2-codegen-1.0.jar
axis2-jibx-1.0.jar
axis2-kernel-1.0.jar
axis2-tools-1.0.jar
axis2-xmlbeans-1.0.jar
backport-util-concurrent-2.1.jar
commons-codec-1.3.jar
commons-fileupload-1.0.jar
commons-httpclient-3.0.jar
commons-logging-1.0.4.jar
geronimo-spec-activation-1.0.2-rc4.jar
geronimo-spec-javamail-1.3.1-rc5.jar
geronimo-spec-jms-1.1-rc4.jar
jaxen-1.1-beta-8.jar
jaxme2-0.5.1.jar
jaxmeapi-0.5.1.jar
jaxmejs-0.5.1.jar
jaxmexs-0.5.1.jar
log4j-1.2.13.jar
neethi-1.0.1.jar
servletapi-2.3.jar
stax-api-1.0.jar
stax-utils-20060501.jar
wsdl4j-1.5.2.jar
wstx-asl-2.9.3.jar
xbean-2.1.0.jar
XmlSchema-1.0.2.jar

また[S2Axis2 基本的な使い方]へ戻る

app.diconへs2-axis.diconのinclude
S2Axis2を使用するサーバ側では、app.diconファイルの中でs2-axis.diconファイルをインクルードします。」
とあるが、こんな感じ




web.xmlの編集。
S2JSFで使っているweb.xmlにマージする。基本的に説明どおりでOK。
下記はS2Axis部分のみ引用。


AxisServlet
org.apache.axis2.transport.http.AxisServlet

repository
/WEB-INF

10


AxisServlet
/servlet/AxisServlet


AxisServlet
/services/*


wsdl
text/xml


xsd
text/xml

app.diconファイルへLogicクラスを登録



http://localhost:8080/mywebapp/services/MyWs?wsdl
WSDLが出ればOK!

無事にいけたと思う。

さて、これからの調査TODO。

  1. insertHogeDto(HogeDto hogeDto)のようなDTOWebサービスクライアントに公開できるのか?(HogeDtoがHogeEntiryを継承している場合含む)
  2. WS-Attachmentは使えるのか?
  3. Windowsクライアント@VB.NETからの利用がきちんとできるか