AXIS入門(AXIS 1.2)
SOAPエンジンであるAXISをインストールし,サンプルを動かしてみた.
AXISはApache eXtensible Interaction Systemの略で,SOAPメッセージを処理するミドルウェアである.
すなわちWebサービスリクエスタ,プロバイダ,そして中継ノードのどのソフトウェア構築にも使用できる.
SOAPトランスポート層も柔軟に変更可能なようになっていて,上位プログラムは下位であるトランスポート層ををあまり意識せず実装することができる.
本頁では,トランスポート層にHTTPを使用する方式(SOAP-HTTPバインド)で,AXISをインストールし,サンプルを動かしてみる.
HTTPバインドでサービスプロバイダを構築する場合,AxisServletを使用する.
文字通りサーブレットを構築する作業となる.
今回はサーブレットエンジンとしてTomcatを使用し,その上でAxisServletを稼働させる.
そのContextとして,servlet.xmlにて以下を記述した.
<Context path="/fireproject" docBase="/somewhere/webapps/axissample" debug="5" reloadable="true"/>さらにTomcatでセキュリティマネージャを有効にしている場合は,catalina.policyにパーミッションを設定する(※).
grant codeBase "file:/somewhere/webapps/axissample/-" {
permission java.security.AllPermission;
};
...どれがクリティカルなのかよくわからないので,今回は全開にしてみた.
※ Debian GNU/Linuxでtomcat4をapt-getした場合は,
/etc/tomcat4/policy.d/04webapps.policyあたりに記述するとよいだろうか.
AxisServletを動作させるためのTomcatの準備ができたので,次に必要なファイルのダウンロード,インストールを行う.
まず,今回ダウンロードしたもの一覧.
- AXIS 1.2のバイナリ.
- Xerces 2.6.2.
- SUNのサイトから,activation.jarを含むjaf-1_0_2-upd2.zipを入手する.
- AXIS 1.2のjaxrpc.jarを${TOMCAT_HOME}/common/libに置く.
- AXIS 1.2のsaaj.jarを${TOMCAT_HOME}/common/libに置く.
- Xerces 2.6.2のxercesImpl.jarを${TOMCAT_HOME}/common/libに置く.
- AXIS 1.2のwebappsディレクトリの中身をまるごと/somewhere/webapps/axissample/に置く. 後で動作確認するJWSを実行するには,Tomcatのプロセスがこの/somewhere/webapps/axissample/WEB-INFより下に読み書き権限が必要であるので,chownなりchmodなりしておく.
Tomcatを再起動したら,まず以下の頁にアクセスする.
http://servername/fireproject/index.jspこれはもちろん先のserver.xmlの記述を前提にしているので,各自の環境にあわせて読みかえられたい. この頁の表示に失敗している場合は,Tomcat自体起動していないかもしれない(例えばcatalina.policyあたりで間違えるかもしれない). この原因は,tomcatの起動ログを中心に確認する. 話しを戻して,ここでは「Apache-AXISへようこそ」といった見出しの頁が表示される. この頁に検証(http://servername/fireproject/happyaxis.jsp)といったリンクがあり,この頁を開くと,AXISの設定がうまくできたかどうかの確認ができる. この頁の表示自体に失敗している場合は,Xercesのインストールミスが考えられるらしい. この頁が表示できた場合は,AXISのコアライブラリが全てそろっていることを確認する. 今回はオプショナルライブラリ,mail.jarとxmlsec.jarが見付からなかったが,本頁の動作確認はできるので,無視する.
次にWebサービスにアクセスしてみる.
最初に簡単なURL指定によるアクセスを行う.
http://servername/fireproject/services/Version?method=getVersionすると,XMLドキュメントが回答される.
soapenv:Faultという要素がなく,
<getVersionReturn xsi:type="xsd:string"> Apache Axis version: 1.2 Built on May 03, 2005 (02:20:24 EDT) </getVersionReturn>といった記述があれば成功である. 要素soapenv:Faultがあると,どこか失敗しているので,ログで確認する.
JWSはWebサービスにおけるJSPのようなものである.
実体はJavaソースファイルだが,拡張子はjwsである.
AXISのサンプルでは,webapps/EchoHeaders.jwsがあるので,これにアクセスする.
http://servername/fireproject/EchoHeaders.jws?method=list http://servername/fireproject/EchoHeaders.jws?method=whoamiやはりXML文書が回答される. 要素soapenv:Faultがなければ成功である. もし,
java.io.FileNotFoundException: /somewhere/webapps/axissample/WEB-INF/jwsClasses/EchoHeaders.java (No such file or directory)といった例外が出た場合は,/somewhere/webapps/axissample/WEB-INF/に適切なパーミッションがないかもしれない. catalina.policyやOSのファイルシステム上のパーミッションを確認されたい(※).
※ 実はOSレベルのパーミッションがないことに気づかずハマった.
私の環境(Debian GNU/Linux Serge)にて実行すると,実行後以下のファイルができていた.
$ ls -al WEB-INF/jwsClasses 合計 12 drwxr-xr-x 2 tomcat4 nogroup 4096 2005-06-10 20:45 . drwxrwxrwx 6 matsu matsu 4096 2005-06-10 22:54 .. -rw-r--r-- 1 tomcat4 nogroup 2662 2005-06-10 20:45 EchoHeaders.classjwsファイルにアクセスすると,JWSHandlerが動作する. これはWEB-INF/jwsClassesをmkdirし(既にあればmkdirしない),そこにEchoHeaders.classを置く. そのためのパーミッションが必要なのである.

