4月 7th, 2008at 12:20
Tags: Apache
Axis2 1.1.1 クイックスタートガイドその1
このガイドの目的は「サービスの作成」と「Axis2を使ったサービスのクライアント」をすばやく開発できること。ここでは簡単なSampleServiceをサンプルとして、作成やデプロイのいくつかの方法を紹介する。同様に、1つか2つ、Axis2のユーティリティーを紹介する。それからクライアントを作成し、それらのサービスにアクセスしてみる。
ほぼ翻訳です。ここではWebサービスの作成、Axis2 Webアプリケーションへのデプロイとテストまでを説明。
原文:http://ws.apache.org/axis2/1_1_1/quickstartguide.html
Note
ドキュメントのコードはStandard Binary Distributionを使っている。具体的にはAXIS2_HOME/sampleディレクトリにある。これらは開発の手助けになる。
関連するsample以下のディレクトリ
- quickstart
- quickstartadb
- quickstartaxiom
- quickstartjibx
- quickstartxmlbeans
中にはantのビルドファイル(build.xml)も含まれている。ビルドファイルを参照すれば、サンプルのコンパイルを簡単に実行できる。
イントロダクション
とりあえず簡単なWebサービスを作ってみる。普通のクラスでよい。
public class SampleService {
private List<String> list = new ArrayList<String>();
public String getHelloWorld(){ return "HelloWorld"; }
public String getParamView(String str, int i){ return "str = " + str + " int = " + 1; }
public String getListString(){ String ret = ""; for(String str : getList()){ ret += str; } return ret; }
public void addParam(String str){ list.add(str); }
public List<String> getList() { return list; }
public void setList(List<String> list) { this.list = list; }}
サービスのパッケージやデプロイには4つの方法があるらしい。まずは、このシンプルなJavaクラスをサービスに対応させる方法を見てみる。
準備
- JDK 1.4以上
- Axis2をダウンロードして解凍しておく
- axis2.warファイルをwebappフォルダからTomcatなどのコンテナにデプロイ
- AXIS2_HOMEを環境変数に設定してく(Note:これをやんないと全スクリプトやビルドファイルは動かないぜ)
AXIS2_HOMEを設定せずに、「AXIS2_HOME\lib」内のJarファイルをプロジェクト内のlibフォルダにいれるのもありでしょう。
まずはWSDLファイルが必要になるのでそれを作成。以下のコマンドを使う。
cd D:\daipresents\project\axis2_111\build\classesD:\download\java\axis2-1.1.1\bin\java2wsdl -cp . -cn com.daipresents.axis2_111.SampleService -of SampleService.wsdl
こうすると、D:\daipresents\project\axis2_111\build\classesにWSDLができあがる。この作業は、対象となるクラス(ここではSampleService)に変更があった場合、毎回行わなければならない。
Axis2のサービス
サーバサイドAxis2はいくつかのサーブレットエンジンにデプロイできる。例えばTomcatとかJBossとか。サーバサイドAxis2のディレクトリ構造は以下のようになっている。
axis2-web META-INFWEB-INF classes conf axis2.xml lib activation.jar ... xmlSchema.jar modules modules.list addressing.mar ... soapmonitor.mar services services.list aservice.aar ... version.aar web.xml
Axis2
Webアプリケーションはアプリケーション管理用JSPなどで構成されている。このWebアプリケーションはサービス追加やサービスの利用開始、利用停止
などの機能を提供してくれる。WEB-INFディレクトリには、サービスディレクトリにデプロイされたサービスを、動かすためのJavaクラスや設定ファ
イルが配置される。
axis2.xmlはもっとも主となるファイル。このファイルによって受け取ったメッセージをどうアプリケーションがやりとりするか制御する。Axis2はモジュールディレクトリに定義されたモジュールを適用するかどうか必要がある。
サービスは「*.aar」ファイルとしてデプロイできる。サービスのコンテンツは明確な方法で準備しなければならない。例えば、サンプルで作ったサービスは以下の構造で作られていないければならない。
SampleService - META-INF - services.xml - com - daipresents - axis2_111 - SampleService.class
サービスの名前は「SampleService」
で、これはservices.xmlに定義されている。そして、パッケージ名に合わせて、適切な場所におかれたJavaクラスフォルダもあることがわかる
(com/daipresents・・・というフォルダ)。META-INFディレクトリはサービスについての情報を追加することができるフォルダで、
Axis2は実行するためにそれらの設定ファイルが必要となる。設定ファイルとしてservices.xmlファイルがあり、このファイルはサービス自身
を定義し、サービスとJavaクラスをリンクさせる役割を持っている。
services.xmlは以下のように記述する。説明文の日本語は文字化けした。また、クイックスタート原文に書いてあるservices.xmlでは動かなかった。こんなんばっかです。。。
<?xml version="1.0" encoding="UTF-8"?><service name="SampleService" scope="application" targetNamespace="http://daipresents.com/"> <description>サンプルのサービスです。</description> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> <schema schemaNamespace="http://axis2_111_SampleService/xsd" /> <parameter name="ServiceClass"> com.daipresents.axis2_111_SampleService.SampleService </parameter></service>
上記のようにサービスを定義する。異なったメッセージを交換するために、MessageReceiverを関連付けていることがわかる。
META-INFディレクトリには、このアプリケーションに含めるつもりである、カスタムのWSDLファイルを置く場所でもある。と書いていたがなくてもいいみたい。「http://localhost:8080/axis2/services/SampleService?wsdl」とアクセスしたらWSDLが表示された。
デプロイは上記フォルダをサーブレットエンジンのwebappフォルダにおくことで実現可能。また、Jarファイル、Warファイルのように圧縮したファイルとしてaarファイルというものもあり、これをwebappフォルダにおいてもデプロイできる。
aarファイルの作成
antのbuild.xmlを使ってaarファイルを作成してみる。build.xmlは「AXIS2_HOME\samples\quickstart」にあるものを使う。
僕はEclipseを使っているので、サンプルのquickstartフォルダ(AXIS2_HOME\samples\quickstart)を
参考にJavaプロジェクトを作ってみた。build.xmlもコピーしておいて、このビルドファイルをつかって上記フォルダ構造のaarファイルを作成
する。
//Eclipseのプロジェクト構造axis2_111_SampleService(Eclipseプロジェクトのルートフォルダ) - src - resources - META-INF - services.xml - build - classes - com - daipresents - axis2_111 - SampleService.class - build.xml
プロジェクトのソースフォルダにはsrcを指定。classの出力先にはbuild/classesを指定しておく。
build.xmlの書き換え
今回のサンプルでは以下のようになる。WSDLの作成タスクも用意されているので、上で説明した「java2wsdl」の実行も自動化できる。
<project basedir="." default="generate.service">
<property environment="env" /> <property name="AXIS2_HOME" value="D:\download\java\axis2-1.1.1" />
<property name="build.dir" value="build" />
<path id="axis2.classpath"> <fileset dir="${AXIS2_HOME}/lib"> <include name="*.jar" /> </fileset> </path>
<target name="compile.service">
<mkdir dir="${build.dir}" /> <mkdir dir="${build.dir}/classes" />
<!--First let's compile the classes--> <javac srcdir="src" destdir="${build.dir}/classes" classpathref="axis2.classpath" debug="on" fork="true"/> </target>
<target name="generate.wsdl" depends="compile.service"> <taskdef name="java2wsdl" classname="org.apache.ws.java2wsdl.Java2WSDLTask" classpathref="axis2.classpath" /> <java2wsdl className="com.daipresents.axis2_111_SampleService.SampleService" outputLocation="${build.dir}" targetNamespace="http://axis2_111_SampleService.daipresens.com/" schemaTargetNamespace="http://axis2_111_SampleService.daipresents.com/xsd"> <classpath> <pathelement path="${axis2.classpath}" /> <pathelement location="${build.dir}/classes" /> </classpath> </java2wsdl> </target>
<target name="generate.service" depends="compile.service"> <!--aar them up --> <copy todir="${build.dir}/classes" failonerror="false"> <fileset dir="${basedir}/resources"> <include name="**/*.xml" /> </fileset> </copy> <jar destfile="${build.dir}/SampleService.aar"> <fileset dir="${build.dir}/classes" /> </jar> </target>
<target name="clean"> <delete> <fileset dir="${build.dir}" /> </delete> </target> </project>
完成したらbuild.xmlを右クリックしてantビルド(2つあると思うので下を)クリック。ターゲットを選べるので
- clean
- complile.service
- generate.wsdl
- generate.service
の順にチェックし、この順番でantを実行する。実行後、buildフォルダを見ればaarファイルとWSDLファイルが出来上がっているはず。
「Error running javac.exe compiler」と出る場合は、環境変数Pathに「C:\jre1.5.0_06\bin」などのパスを通してあげよう。
デプロイ
「TOMCAT_HOME\webapps\axis2\WEB-INF\services」にaarファイルをコピー。Web上からだと「http://localhost:8080/axis2/」にアクセスしてAdministration>ログイン>Upload Serviceでアップロードできる。
アップロードしたら、左メニューのSystem Components>Available Servicesを開いて
SampleServiceService EPR : http://localhost:8080/axis2/services/SampleServiceService REST epr : http://localhost:8080/axis2/rest/SampleService
とでていれば成功。
再デプロイもaarファイルの上書きでできるけど、リロードがうまくいかない場合があるので、一回消してAvailable Servicesから消えたことを確認してから、再デプロイしたほうがいいみたい。
デプロイしたWebサービスをテスト
以下のアドレスをブラウザから入力する。
http://localhost:8080/axis2/rest/SampleService/getHelloWorldResponse
すると以下の結果が表示される。
<ns:getHelloWorldResponse xmlns:ns="http://axis2_111_SampleService/xsd"> <ns:return>HelloWorld</ns:return> </ns:getHelloWorldResponse>
引数の必要なサービスを確認する場合は以下のように。
http://localhost:8080/axis2/rest/SampleService/getParamView?str=aragaki&i=100
SOAPメッセージを投げて確認
SOAPを投げるGUIツールとしてsoapUIと言うものがあるので、それを使ってWebサービスを試してみる。
soapUIの使い方
ダウンロードしたzipファイルを解凍してsoapui.batをダブルクリックで起動。
左にProjectsとあるので、右クリック>New WSDL Projectを選択。プロジェクト名(ここではSampleService)を入れて、プロジェクトの定義ファイルを保存。
Projectsの下にSampleServiceと表示されるので、Add WSDL from URLをクリックして「http://localhost:8080/axis2/services/SampleService?wsdl」を入力。全Operationのデフォルトリクエストを作るか聞かれるので、「はい」を選択。SampleServicePortTypeが表示されるので、+をクリックして開くと、Operationが全て表示される。
getHelloWorldを開くとRequest1が表示されるので、ダブルクリックすると、右ペイン左側の「SOAP Request」にSOAPのHeaderとBodyが表示されるはず。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body/></soapenv:Envelope>
右ペインの上に緑の>ボタンがあるので、それをクリックして送信。すると右ペイン右側の「SOAP Response」にSOAPのレスポンスが表示される。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> <ns:getHelloWorldResponse xmlns:ns="http://axis2_111_SampleService/xsd"> <ns:return>HelloWorld</ns:return> </ns:getHelloWorldResponse> </soapenv:Body></soapenv:Envelope>
「<ns:return>HelloWorld</ns:return>」とHelloWorldが表示されると成功。




