AXIS2ウェブサービスチュートリアル

アパッチAxis2チュートリアルへようこそ。最近、私はApache Axis2のスキルを1.3から最新バージョン1.5.4にアップグレードしようとしていましたが、自己説明可能で最新リリースをカバーしたチュートリアルを見つけることができませんでした。そのため、私の投稿はAxis2 Webサービスチュートリアルの基礎となります。

アパッチAxis2チュートリアル

apache axis2 tutorial

このチュートリアルを使うべき人は誰ですか? (Kono chūtoriaru o tsukau beki hito wa dare desu ka?)

このチュートリアルは、Apache Axis2を使用してWebサービスを開発および展開したいJavaプログラマーを対象としています。

前提条件

このチュートリアルの範囲は、Axis2を使用してWebサービスを作成し、Javaクライアントプログラムを使用してWebサービスを呼び出し、Soap UIツールを使用してWebサービスをテストすることです。Java、Webサービス、XML、Ant、およびアプリケーションサーバー(Tomcat)の基本的な理解が、チュートリアルを容易に理解するために必要です。

使用されたソフトウェアとツール

    1. Java Development Kit (JDK) 1.6.0(Tomcat 7は最小JDK 1.6を要求します)

 

    1. Apache Ant 1.7.0(Axis2は最小バージョン1.6.5を要求します)

 

    1. Apache Axis2 1.5.4(バイナリディストリビューション)

 

    1. Eclipse 3.6.1プロジェクト開発用IDE(他のIDE(例:NetBeans)も使用できます)

 

    1. Apache Tomcat 7.0.8

 

    1. WebサービスのテストにはSoapUIを使用します。

 

    Mac OS X 10.6.4(私はMac OSで作業していますが、チュートリアルは他のオペレーティングシステムでも動作するはずです。ただし、コマンドの実行には一部変更が必要かもしれません)

システムの設定

    1. 以下の通り、日本語でパラフレーズします。いくつかのオプションがありますが、一つ選んでください。

最新のApache Tomcatの最新バージョンをダウンロードしてください。現時点では、最新のバージョンは7.0.8です。このチュートリアルではそのバージョンを使用しています。最低限のJavaバージョン1.6が必要なので、システムにインストールされていることを確認してください。Java 6がシステムにインストールされていない場合は、まずJava SE Downloadsからダウンロードしてインストールしてください。Tomcat Coreのzipファイル(apache-tomcat-7.0.8.zip)をダウンロードし、システムにインストールするために展開してください。サーバーを起動および停止させるために、JAVA_HOME環境変数を設定してください。

Apache Axis2 1.5.4 Binary DistributionのzipをApache Axis2 – Releasesからダウンロードしてください。このステップは、tomcatにデプロイされるaxis2.warを作成し、プロジェクトで使用されるaxis2ライブラリを取得するために必要です。

Axis2のバイナリディストリビューションのzipファイルを適当なディレクトリに展開してください。axis2-1.5.4/webappディレクトリに移動し、「ant create.war」コマンドを実行してaxis2.warデプロイメントをaxis2-1.5.4/distディレクトリに作成してください。Apache Antがインストールされていない場合は、Apache Ant – Binary Distributionsからダウンロードしてインストールしてください。なお、War Distributionからダウンロードしたaxis2.warに問題が発生しましたが、後で判明しましたが、いくつかのjarがaxis2 War Distributionには欠けていることがわかりました。War Distributionには58個のjarしか含まれておらず、Binary Distributionには63個のjarが含まれています。(どのjarが不足しているかを探すのが面倒でした)

axis2.warをtomcatのwebappsディレクトリにコピーして、tomcatアプリケーションサーバーにデプロイしてください。ホットデプロイメントに対応していない場合は、サーバーを再起動する必要がある場合があります。

https://localhost:8080/axis2/にアクセスし、「Validate」リンクをクリックしてください。Happy AxisページがGREENの色で表示されれば、axis2が正常にデプロイされていることを意味します。システムのセットアップは完了しましたので、これでAxis2のウェブサービスの作成に進めます。

axis2 tutorial

Axis2のWebサービスを作成する

Axis2 Webサービスアーカイブを作成するためには、以下のものが必要です。

    1. Axis2WSImplementationという名前のJavaプロジェクトで、Webサービスとして公開されるクラスがあります。この例では、MyServiceクラスから2つの操作を公開しています。最初の操作は入力がString型で、String型を返します。2番目の操作は入力がMyBeanというJavaオブジェクトで、データの操作を行った後に再びMyBeanオブジェクトとして返します。注意点として、MyBeanクラスはSerializableインターフェースを実装しているため、ネットワーク上で転送することができます。

aar、wsdl、およびクライアント側のスタブとコールバックハンドラークラスを作成するために使用されるAntのbuild.xmlファイル。

axis2アーカイブの一部となるservices.xmlファイル。このファイルはaxis2アーカイブのMETA-INFフォルダに配置されます。

apache axis2 project

Axis2のWebサービスプロジェクトの説明

MyService.java:Axis2ウェブサービスとして公開される実装クラス。

package com.scdev.ws;

import com.scdev.bean.MyBean;

public class MyService {

	public String getData(String input) {
		return "Hi" + input;
	}

	public MyBean getObjectData(MyBean myBean) {

		String name = myBean.getName();
		int id = myBean.getId();
		myBean.setId(id + 100);
		myBean.setName("Output: " + name);

		return myBean;
	}
}

WebサービスのgetObjectData操作の入力および出力であるJavaビーンクラス、MyBean.java。

package com.scdev.bean;

import java.io.Serializable;

public class MyBean implements Serializable {

	private static final long serialVersionUID = -1129402159048345204L;

	private String name;

	private int id;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

}

services.xml:このxmlファイルにはAxis2ウェブサービス関連のパラメータが含まれています。ServiceClassパラメータは、ウェブサービスとして公開されるクラスを指定します。他の重要なパラメータには、targetNamespaceおよびschemaNamespaceがあります。

<service name="MyService" scope="application" targetNamespace="https://scdev.com/">
 <description>
 MyService
 </description>
 <messageReceivers>
 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 </messageReceivers>
 <schema schemaNamespace="https://scdev.com/xsd"/>
 <parameter name="ServiceClass">com.scdev.ws.MyService</parameter>
</service>

build.xml:Axis2のタスクを実行するためのAntビルドファイルです。詳細は3つのターゲットが定義されています。

    1. generate.wsdl: このターゲットは、buildフォルダにMyService.wsdlファイルを生成します。targetNamespaceとschemaTargetNamespaceがservice.xmlファイルと同じであることを確認してください。

 

    1. generate.service: このターゲットは、buildフォルダにaxis2アーカイブを生成します。アーカイブにはservices.xmlファイルが含まれ、アーカイブ名はMyService.aarです。

 

    generate.client: このターゲットは、クライアント側のクラスを生成します。generate.wsdlを実行してから実行してください。つまり、MyService.wsdlファイルがbuildフォルダに存在する必要があります。

ビルド.xml

<project name="AxisWSImplementation" basedir="." default="generate.service">

 <property environment="env"/>
 <property name="build.dir" value="build"/>

 <path id="axis2.classpath">
 <fileset dir="${basedir}/lib">
 <include name="*.jar"/>
 </fileset>
 </path>

 <target name="compile.service">
 <mkdir dir="${build.dir}"/>
 <mkdir dir="${build.dir}/classes"/>
 <mkdir dir="${build.dir}/resources"/>
 <!--First let's compile the classes-->
 <javac debug="on"
 fork="true"
 destdir="${build.dir}/classes"
 srcdir="${basedir}/src"
 classpathref="axis2.classpath">
 </javac>
 </target>

 <target name="generate.wsdl" depends="compile.service">
 <taskdef name="java2wsdl"
 classname="org.apache.ws.java2wsdl.Java2WSDLTask"
 classpathref="axis2.classpath"/>
 <java2wsdl className="com.scdev.ws.MyService"
 outputLocation="${build.dir}"
 targetNamespace="https://scdev.com/"
 schemaTargetNamespace="https://scdev.com/xsd">
 <classpath>
 <pathelement path="${axis2.classpath}"/>
 <pathelement location="${build.dir}/classes"/>
 </classpath>
 </java2wsdl>
 </target>

 <target name="generate.service" depends="compile.service">
 <copy toDir="${build.dir}/classes" failonerror="false">
 <fileset dir="${basedir}/resources">
 <include name="**/*.xml"/>
 </fileset>
 </copy>
 <jar destfile="${build.dir}/MyService.aar">
 <fileset excludes="**/Test.class" dir="${build.dir}/classes"/>
 </jar>
 </target>

 <target name="generate.client" depends="compile.service">
 <taskdef name="wsdl2java"
 classname="org.apache.axis2.tool.ant.AntCodegenTask"
 classpathref="axis2.classpath"/>
 <wsdl2java
 wsdlfilename="${build.dir}/MyService.wsdl"
 output="${build.dir}/resources" />
 </target>

 <target name="clean">
 <delete dir="${build.dir}"/>
 </target>
</project>

WSDL、Axisアーカイブ、およびスタブファイルの生成

  • Execute generate.wsdl ant target to generate MyService.wsdl file.
  • Execute generate.service ant target to generate the MyService.aar file.
  • Execute generate.client ant target to generate the Stub classes.

Axis2ウェブサービスの展開

axis2 list services page

Axis2ウェブサービスのテスト

サービスを展開した後、まずはテストが必要です。ここでは、Webサービスのテストに最適なツールの一つであるSoapUIを使用しています。もし持っていない場合は、彼らのウェブサイトから簡単にダウンロードしてインストールできます。SoapUIを使用したテストの手順は以下の通りです。

    1. 新しいSoapUIプロジェクトを作成し、プロジェクト名を「MyServiceTest」(好きな名前を使用しても構いません)とし、初期WSDL/WADLを「https://localhost:8080/axis2/services/MyService?wsdl」(MyServiceリンクをクリックした後、Axis2サービスのリストページからこのURLを取得できます)とします。その他のオプションはデフォルト値のままにして、OKボタンをクリックしてSoapUIテストプロジェクトを作成してください。

 

    1. 任意のSoapバインディングの「getData」と「getObjectData」SOAPリクエストをダブルクリックします。

 

    リクエストに入力値を提供し、それをWebサービスのエンドポイントURLに送信します。下のイメージと同様のサービスからの出力が得られるはずです。これにより、Webサービスが稼働中であることが確認されます。
Axis2 Web service testing using SoapUI

スタブファイルを使用して、Axis2 Webサービスを呼び出す。

    1. EclipseでJavaプロジェクトAxis2Clientを作成してください。

 

    1. libフォルダを作成し、ダウンロードしたバイナリディストリビューションのlibフォルダからすべてのAxis2のjarファイルをコピーしてください。これらのjarファイルをプロジェクトのビルドパスに追加してください。

 

    1. 以前に生成されたMyServiceStub.javaとMyServiceCallbackHandler.javaを正しいパッケージ構造でプロジェクトのsrcにコピーしてください。私の場合、それらをcom.scdevパッケージにコピーしました。これらのクラスを他の人に提供する必要がある場合、変更を避けるためにそれらからjarファイルを作成し、他の人と共有することを強くお勧めします。

 

    Axis2ClientUsingStubsFromAntクラスを作成し、Webサービスの操作を呼び出すために使用してください。プロジェクトの構造は以下のイメージと似ているはずです。
axis2 tutorial project
package com.scdev.ws.client;

import java.rmi.RemoteException;

import com.scdev.MyServiceStub;
import com.scdev.MyServiceStub.GetData;
import com.scdev.MyServiceStub.GetDataResponse;
import com.scdev.MyServiceStub.GetObjectData;
import com.scdev.MyServiceStub.GetObjectDataResponse;
import com.scdev.MyServiceStub.MyBean;

/**
 *
 * @author Pankaj - www.scdev.com This class will invoke Axis2 web service
 *         operations using Stub classes
 *
 */
public class Axis2ClientUsingStubsFromAnt {

	/**
	 * END_POINT is the web service endpoint
	 */
	private final static String END_POINT = "https://localhost:8080/axis2/services/MyService";

	public static void main(String[] args) throws RemoteException {
		System.out.println("START");

		// Create the Stub Object by passing the Web Service Endpoint URL
		MyServiceStub stub = new MyServiceStub(END_POINT);

		// Creating an input object for the getData operation
		GetData getDataInput = new GetData();

		// Setting the input part in the getData input object
		getDataInput.setInput("PANKAJ");

		// invoking the getData operation
		GetDataResponse getDataOutput = stub.getData(getDataInput);

		// get_return method returns the web service output object. Here its
		// String, so we can
		// directly print the returned value
		System.out.println("Output:" + getDataOutput.get_return());

		// Creating input object for the getObjectData operation
		GetObjectData getObjectDataInput = new GetObjectData();
		MyBean myBean = new MyBean();
		myBean.setId(1);
		myBean.setName("KUMAR");

		// Setting the input part in the getObjectData input object
		getObjectDataInput.setMyBean(myBean);

		// invoking the getObjectData operation
		GetObjectDataResponse getObjectDataOutput = stub
				.getObjectData(getObjectDataInput);

		// Get the MyBean object from the response object
		MyBean myBeanOutput = getObjectDataOutput.get_return();

		// Print the myBeanOutput values to check that web service operations
		// are getting invoked
		System.out.println("ID:" + myBeanOutput.getId() + "NAME:"
				+ myBeanOutput.getName());

		System.out.println("DONE");

	}

}

Webサービスを呼び出すために、Axis2ClientUsingStubsFromAntクラスを実行してください。上記のプログラムの出力は次のとおりです。

START
log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
Output:HiPANKAJ
ID:101NAME:Output: KUMAR
DONE

もしAxis2の理解や初め方に役立つチュートリアルを見つけた場合、コメント欄でご意見を共有してください。そして、他の人とも共有することを忘れずにしてください。2回のクリックと5秒の時間が他の誰かにとってAxis2の学習を簡単にすることができますよ。:)

コメントを残す 0

Your email address will not be published. Required fields are marked *