Apache Axis2とは、Webサービスを作成するためのJavaフレームワークです。SOAP メッセージを送受信したり、WSDL を使用してサーバとクライアントの実装クラスを作成できます。この記事ではAxisの使い方をご紹介します。
Apache Axis2とは、Java及びXMLに基づいたWebフレームワークである。Axis2は簡単に次のタスクを実行することができる。
AAR (Axis Application Archive)とは、Axis2にデプロイするアーカイブファイルである。AARファイルはWARファイルとほぼ同じ構造であるが、WEB-INFディレクトリ下にサービス記述子(services.xml)が含まれている。AARファイルの拡張子は「.aar」である。
Webサービスプログラムを作成する。
public class SayHelloService {
public String sayHello(String who) {
return "Hello " + who + "!";
}
}
Webサービスプログラムをコンパイルして、クラスファイルを生成する。
$ javac SayHelloService.java
META-INF/services.xmlを作成する。
<service name="SayHelloService" scope="application">
<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>
<parameter name="ServiceClass">SayHelloService</parameter>
</service>
jarコマンドでAARファイルを作成する。
$ jar cvf sayhelloservice.aar META-INF SayHelloService.class
Axisの画面(たとえばhttp://localhost:8080/axis2/)をWebブラウザで開く。
管理コンソールを開くため、「Administration」リンクをクリックする。
ユーザ名とパスワードを聞かれるので、ユーザ名とパスワードを入力して、「Login」ボタンをクリックする。
ユーザ名とパスワードは、axis2.warのWEB-INF/conf/axis2.xmlというファイルで設定されている。
<axisconfig name="AxisJava2.0">
(中略)
<parameter name="userName">admin</parameter>
<parameter name="password">axis2</parameter>
「Upload Service」リンクをクリックすると、ファイルを開くダイアログが表示される。sayhelloservice.aarファイルを選択して、「開く」ボタンをクリックする。
「Available Services」リンクをクリックする。SayHelloServiceの情報が表示される。
WSDLはWebブラウザからを次のURLを開くことで見ることができる。
http://localhost:8080/axis2/services/SayHelloService?wsdl
Webサービスの利用者のことをコンシューマ(消費者)又はリクエスタ(要求者)と呼ぶ。コンシューマはサービススタブとクライアントから構成される。サービススタブは、クライアントのためにサービスの代理を務めるもので、クライアントの開発者が簡単に利用できるAPIも提供する。JDKに含まれているwsimportというコマンドでWSDLからサービススタブを生成することができる。
$ mkdir src
$ wsimport -extension -s src http://localhost:8080/axis2/services/SayHelloService?wsdl
生成されたサービススタブを利用するクライアントプログラムを作成する。
import org.apache.ws.axis2.SayHelloService;
import org.apache.ws.axis2.SayHelloServicePortType;
public class SayHelloClient {
public static void main(String[] args) {
SayHelloService service = new SayHelloService();
SayHelloServicePortType port = service.getSayHelloServiceHttpSoap11Endport();
String response = port.sayHello("Marina");
System.out.println(response);
}
}
クライアントのソースプログラムをコンパイルする。
$ javac SayHelloClient.java
クライアントプログラムを実行する。
$ java SayHelloClient
Hello Marina!
Axis2は次のデータバインディングフレームワークをサポートしている。
Data binding | Description |
---|---|
ADB | Axis Data Binding Framework |
XMLBeans | Apache XMLBeans |
JiBX | Binding XML to Java Code |
WSDL2javaコマンドの -d
オプションでどのフレームワーク向けのコードを生成するか指定することができる。
ユーザの利便性のためにAxis2には一連のツールがバンドルされている。
Tool | Description |
---|---|
Maven2 AARプラグイン | Axis2サービスファイル(AARファイル)を生成するMaven2プラグイン |
Maven2 Java2WSDLプラグイン | JavaクラスからWSDLを生成するMaven2プラグイン |
Maven2 WSDL2Codeプラグイン | WSDLからスタブを生成するMaven2プラグイン |
Maven2 AARプラグインはAxis2サービスファイル(AARファイル)を生成する。
AARプラグインは、3つの異なるモードでAxis2サービスAARのパッケージングを可能にする。
Goal | Description |
---|---|
axis2-aar:aar | AARアーティファクトを生成する。 |
axis2-aar:inplace | ソースツリー内のAARをパッケージ化する。 |
axis2-aar:exploded | 展開されたAARアプリケーションをパッケージ化する。 |
各モードはゴールによって実現化される。たとえば、現在のプロジェクトから、展開されたAARを生成するためには次のコマンドを実行する。
mvn axis2-aar:exploded
Maven2 Java2WSDLプラグインは、入力としてJavaクラスを取り、クラスメソッドを呼び出すためのWebサービスを記述したWSDLを生成する。
Java2WSDLプラグインは単一の目標を提供している。
Goal | Description |
---|---|
java2wsdl | Javaクラスを読み込み、Webサービスとしてクラスメソッドを呼び出すためのWSDLを生成する。 |
プラグインを実行するには、POM (Project Object Model)に次のセクションを追加する。
<build>
<plugins>
<plugin>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-java2wsdl-maven-plugin</artifactId>
<configuration>
<className>com.foo.myservice.MyHandler</className>
</configuration>
<executions>
<execution>
<goals>
<goal>java2wsdl</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Mavenライフサイクルのgenerate-resources段階で、プラグインは自動的に起動される。また、コマンドラインからコマンドを実行することにより、直接呼び出すこともできる。
$ mvn axis2-java2wsdl:java2wsdl
デフォルトでは、Java2WSDLプラグインは指定されたJavaクラスを読み込み、target/generated-resources/java2wsdl/service.wsdlファイルを作成する。
Maven2 WSDL2Codeプラグインは、入力としてWSDLを取り、WSDLに一致するWebサービスを呼び出したり実装するための、クライアントとサーバのスタブを生成する。
WSDL2Codeは単一の目標を提供している。
Goal | Description |
---|---|
wsdl2code | WSDL読み込み、コードを生成する。 |
プラグインを実行するには、POM (Project Object Model)に次のセクションを追加する。
<build>
<plugins>
<plugin>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-wsdl2code-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<goals>
<goal>wsdl2code</goal>
</goals>
<configuration>
<packageName>com.foo.myservice</packageName>
<wsdlFile>src/main/wsdl/myservice.wsdl</wsdlFile>
<databindingName>xmlbeans</databindingName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
また、依存関係としてAxis2のJARを追加する。
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
<version>1.4</version>
</dependency>
Mavenライフサイクルのgenerate-sources段階で、プラグインは自動的に起動される。また、コマンドラインからコマンドを実行することにより、直接呼び出すこともできる。
$ mvn axis2-wsdl2code:wsdl2code
デフォルトでは、プラグインはsrc/main/axis2/service.wsdlファイルを読み取る。Javaプログラミング言語及びADBデータバインディング用ソースは、target/generated-sources/axis2/wsdl/codeに生成される。
AAR内部のSpringを実行したい場合、次の点に注意する必要がある。
デフォルトでは、Axis2クラスローダストラテジは、AAR内部でのSpring実行を許可していない。AAR内部でSpring実行を許可するためには、services.xml内でcomposite
パラメータを使用する。