4月 7th, 2008at 12:20

Tags:

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サービスを試してみる。

http://www.soapui.org/

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が表示されると成功。

このエントリーをはてなブックマークに追加