←フエルチラシノウラ。トップページへもどる。

【Java】Webサービスと通信する方法。【SOAP】

Java Soap HTTP WebService Webサービス RPC synchronus 同期通信 axis2

今回利用した開発環境。


Java: JDK1.5.0_11
Eclipse: Eclipse SDK 3.2.0
Tomcat: apache-tomcat-5.5.23
Axis2: axis2-1.1.1

?eclipseでプロジェクト作成



プロジェクト作成


Eclipseのパッケージエクスプローラで右クリック >新規>プロジェクト>動的 Web プロジェクトを選択。


プロジェクト名は axis2 とします。

Axis2を配置


解凍したAxis2のwebappフォルダの中身を先ほど作成したプロジェクトのWebContentフォルダの下にコピーします。

Tomcatの設定


Eclipseのパッケージエクスプローラで右クリック >実行>サーバで実行 (Tomcat v5.5 サーバ を起動します。)


http://localhost:8080/axis2/ にアクセスしてみてAxis2の画面が表示されればOK。

?サーバアプリ作成



今回は、axis2フォルダ内のsamplesフォルダの version アプリを利用します。


Version.java(サーバサイドアプリ)


Axis2のバージョンを文字列で返すだけの単純なメソッドを持つクラスです。

package sample.axisversion;

public class Version {
public String getVersion() throws Exception {
return "Hello I am Axis2 version service ," +
" My version is " + org.apache.axis2.Version.getVersionText();
}
}


プロジェクトのフォルダ構成


axis2
 ┣src
 ┃ ┗sample
 ┃   ┗axisversion
 ┃     ┣Version.java
 ┃     ┣VersionClient.java ※1
 ┃     ┣VersionServiceStub.java ※1
 ┃     ┗VersionServiceCallbackHandler.java ※1
 ┣META-INF
 ┃ ┗services.xml
 ┣build
 ┗WebContent ※2
   ┣axis2-web
   ┣META-INF
   ┣WEB-INF
   ┗wsdl

※1

これはスタブとクライアントなので、後ほど作成します。


※2

axis2のwebappの中身が入ります。詳細は省略します。



サーバにデプロイ


Eclipseのパッケージエクスプローラで右クリック >エクスポート>JARファイル


src以下のJavaを指定してJARファイルを作成します。
作成したJARを http://localhost:8080/axis2/axis2-admin/upload にアップロードすればデプロイされます。

管理画面にはIDとPasswordが必要です。デフォルトは admin:axis2 です。



services.xmlの設定


サンプルに入っているservices.xmlをそのまま利用します。

<service name="Version">
<description>
This service is to get the running Axis version
</description>
<parameter name="ServiceClass" locked="false">sample.axisversion.Version</parameter>
<operation name="getVersion">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>



※上記は単一のserviceですが、複数のserviceを登録する場合は、serviceタグをserviceGroupタグで囲います。

?サーバアプリからWSDLを自動生成



EclipseのWebサービス自動生成機能を利用する。


EclipseのパッケージエクスプローラでVersion.javaを右クリック >Web サービス>Web サービスの作成


WSDLファイルもここで作成されているはずです。

?WSDLからクライアントで利用するスタブを自動生成



WSDLからスタブを生成するバッチ


以下のようなbatファイルを作成してVersion.wsdlからスタブを自動生成します。
Version.wsdlが存在するディレクトリへ移動し、コマンドから以下のように実行してください。

%AXIS2_HOME%/bin/wsdl2java.bat -uri ./Version.wsdl



※注意


AXIS2_HOME が設定されていて、 AXIS2_CLASS_PATH にパスが通っていることが前提となります。
AXIS2_HOME は axis2を解凍したフォルダ、
AXIS2_CLASS_PATH は AXIS2_HOME/lib/*.jar にパスが通っていることを確認してください。



生成されたJavaファイル


batを起動すると以下の2つのスタブが自動生成されます。


VersionServiceStub.java


VersionServiceCallbackHandler.java



?スタブを使ってクライアント作成



スタブを適当な場所に持ってくる。


今回は、src/sample/axisversion/ フォルダに上記の2つのJavaファイルをコピーしました。

VersionClient.java(クライアントアプリ)



package sample.axisversion;
/**
* サンプルVersionServiceのクライアントです。
*
* このクライアントを作る前の下準備
*
*  0) VersionWsdl2Java.bat を自作します。
*  1) 0)により VersionServiceStub.java と VersionServiceCallbackHandler.java の自動生成を行いました。
*  2) 1)により生成されたクラスをsample.axisversionパッケージに移動しました。
*  4) スタブでExceptionが出るので、new javax.xml.namespace.QNameな処理をしているところを少し弄りました。
*    自動生成されたservices.xmlと自動生成されたスタブとの間でパラメータ不一致がある様子。
*/
public class VersionClient {

public static void main(String[] args) {
try {
VersionServiceStub stub = new VersionServiceStub(
"http://localhost:8080/axis2/services/Version");

getVersion(stub);

} catch (Throwable e) {
e.printStackTrace();
}
}

private static void getVersion(VersionServiceStub stub) throws Throwable {
VersionServiceStub.GetVersion req = new VersionServiceStub.GetVersion();
VersionServiceStub.GetVersionResponse res = stub.getVersion(req);
System.err.println(res.getGetVersionReturn());
}
}



?実行



Tomcatを起動し、作成したクライアントを起動する。

クライアント実行結果。


Hello I am Axis2 version service , My version is 1.1.1



上記の結果が出力されれば、成功です。


http://goodjob.boy.jp/chirashinoura/id/129.html

作成日: 2007-04-04 23:15:30

最終更新日: 2008-03-18 10:04:31

▲このページの上へ