WSDLからWebサービスのインターフェイス実装コードを自動生成する際に、JBoss 5.0 Serverが必要になるので、起動しておきます。
SimpleWebService.javaを右クリックし、[Webサービス]→[Webサービスの作成]を選択します。
繰り返しますが、今回はボトムアップでWebサービスを作成するので、同時にWebサービスのインターフェイスを実装したコードも自動生成してくれます。従って、この作業により「WSDL⇒Webサービスのインターフェイス実装コード」という流れの自動生成ができます。[Web サービス]ダイアログで以下のように入力してください。
Webサービスの作成が完了すると、以下のようにプロジェクトとWSDL、Webサービス利用者からWebサービスに接続するために必要なクラスのソースが自動的に作成されます。これらを用いて、利用者のJavaプログラムを作成し、先ほど起動したJBoss 5.0 Serverに接続すると、Webサービスが利用できます。
自動生成されたWSDLは、以下のようになります。WSDLには、Webサービスの引数や戻り値などのインターフェイスや、プロトコル、接続先などが記述されています。
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://test.service.web"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://test.service.web"
xmlns:intf="http://test.service.web"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDLはApache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)によって生成されました / [en]-(WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT))-->
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://test.service.web" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="add">
<complexType>
<sequence>
<element name="a" type="xsd:int"/>
<element name="b" type="xsd:int"/>
</sequence>
</complexType>
</element>
<element name="addResponse">
<complexType>
<sequence>
<element name="addReturn" type="xsd:int"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="addResponse">
<wsdl:part element="impl:addResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="addRequest">
<wsdl:part element="impl:add" name="parameters"/>
</wsdl:message>
<wsdl:portType name="SimpleWebService">
<wsdl:operation name="add">
<wsdl:input message="impl:addRequest" name="addRequest"/>
<wsdl:output message="impl:addResponse" name="addResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SimpleWebServiceSoapBinding" type="impl:SimpleWebService">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="add">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="addRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SimpleWebServiceService">
<wsdl:port binding="impl:SimpleWebServiceSoapBinding" name="SimpleWebService">
<wsdlsoap:address location="http://localhost:8080/sampleJBossWebService/services/SimpleWebService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
また以下は、Webサービスに接続するために必要なクラスです。これらのクラスを用いてWebサービスのクライアントを作成します。
| Javaファイル | 概要 |
|---|---|
| SimpleWebService.java | Webサービスのインターフェイス |
| SimpleWebServiceProxy.java | Webサービスの代理クラス |
| SimpleWebServiceService.java | Webサービスを取得する際のインターフェイス。SimpleWebServiceServiceLocatorクラスで実装されている |
| SimpleWebServiceServiceLocator.java | Webサービスを検索し、取得するクラス |
| SimpleWebServiceSoapBindingStub.java | 通信に必要な具体的な処理が実装されているクラス |
| 表 自動生成されたクラスのソース一覧 | |
動作確認のため、sampleJBossWebServiceClient/src配下に、簡単なWebサービス利用者のJavaプログラムを作成します。ここではパッケージ「web.service.test」配下に作成したとします。
package web.service.test;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
/**
* 簡単なWebサービス利用者のJavaプログラム
*/
public class SimpleClient {
public static void main(String[] args) {
try {
// Webサービスの取得
SimpleWebService simpleWebService
= new SimpleWebServiceServiceLocator().getSimpleWebService();
// Webサービスの実行
System.out.println(simpleWebService.add(123000, 456));
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
サンプルでは、まず以下の部分でWebサービスを取得しています。SimpleWebServiceクラス、SimpleWebServiceServiceLocatorクラスは、図11にあった自動的に生成されたクラスを使用しています。
// Webサービスの取得 SimpleWebService simpleWebService = new SimpleWebServiceServiceLocator().getSimpleWebService();
次に、Webサービスを実行しています。動作確認のため、Webサービスからの戻り値をコンソールに出力しています。
// Webサービスの実行 System.out.println(simpleWebService.add(123000, 456));
作成したJavaプログラムを実行すると、以下のようにサービスからメッセージを取得しコンソールに出力します。
サンプルクラスは、Webサービスのメソッドに対して、「123000, 456」と引数を与えています。Webサービスの処理は、与えられた引数を加算するので、コンソールには、加算された値「123456」が表示されています。
以上で、Webサービスの構築は完了です。実際にコードを書くのは、Webサービス利用者のJavaプログラムとWebサービス提供者のJavaプログラムだけであり、双方の通信に関する部分などはすべて自動的に生成されるので、とても簡単にWebサービスの実装ができたと思います。
次ページでは最後に、実際にどのようなメッセージがやりとりされているか、その中身を確認してみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.