ファイヤープロジェクト
AXIS入門(AXIS 1.2)
2005-06-10T23:30+09:00   matsu
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の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を再起動すると,AXISのサンプルなどが動きだす.
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.class
jwsファイルにアクセスすると,JWSHandlerが動作する. これはWEB-INF/jwsClassesをmkdirし(既にあればmkdirしない),そこにEchoHeaders.classを置く. そのためのパーミッションが必要なのである.
matsu(C)
Since 2002
Mail to matsu