いまさら聞けない「Webサービス」の常識企業システムの常識をJBossで身につける(6)(3/4 ページ)

» 2010年02月26日 00時00分 公開
[上川伸彦株式会社ビーブレイクシステムズ]

【3】EclipseでJavaクラスからWSDL、Webサービスのインターフェイス実装コードを自動生成

 WSDLからWebサービスのインターフェイス実装コードを自動生成する際に、JBoss 5.0 Serverが必要になるので、起動しておきます。

図8 JBoss 5.0 Serverの起動 図8 JBoss 5.0 Serverの起動

 SimpleWebService.javaを右クリックし、[Webサービス]→[Webサービスの作成]を選択します。

図9 Webサービスの自動生成 図9 Webサービスの自動生成

 繰り返しますが、今回はボトムアップでWebサービスを作成するので、同時にWebサービスのインターフェイスを実装したコードも自動生成してくれます。従って、この作業により「WSDL⇒Webサービスのインターフェイス実装コード」という流れの自動生成ができます。[Web サービス]ダイアログで以下のように入力してください。

  • [Webサービス・タイプ]:ボトムアップ Java bean Web サービス
  • [サービス実装]:web.service.test.SimpleWebService
  • [クライアントタイプ]:Java プロキシー
図10 [Web サービス]ダイアログ 図10 [Web サービス]ダイアログ

 Webサービスの作成が完了すると、以下のようにプロジェクトとWSDL、Webサービス利用者からWebサービスに接続するために必要なクラスのソースが自動的に作成されます。これらを用いて、利用者のJavaプログラムを作成し、先ほど起動したJBoss 5.0 Serverに接続すると、Webサービスが利用できます。

図11 Webサービス作成後のプロジェクト 図11 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>
SimpleWebService.wsdl

 また以下は、Webサービスに接続するために必要なクラスです。これらのクラスを用いてWebサービスのクライアントを作成します。

Javaファイル 概要
SimpleWebService.java Webサービスのインターフェイス
SimpleWebServiceProxy.java Webサービスの代理クラス
SimpleWebServiceService.java Webサービスを取得する際のインターフェイス。SimpleWebServiceServiceLocatorクラスで実装されている
SimpleWebServiceServiceLocator.java Webサービスを検索し、取得するクラス
SimpleWebServiceSoapBindingStub.java 通信に必要な具体的な処理が実装されているクラス
表 自動生成されたクラスのソース一覧

【4】動作確認のために、利用者側のプログラムを準備

 動作確認のため、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();
		}
	}
}
SimpleClient.java

 サンプルでは、まず以下の部分でWebサービスを取得しています。SimpleWebServiceクラス、SimpleWebServiceServiceLocatorクラスは、図11にあった自動的に生成されたクラスを使用しています。

	  		// Webサービスの取得
			SimpleWebService simpleWebService 
				= new SimpleWebServiceServiceLocator().getSimpleWebService();

 次に、Webサービスを実行しています。動作確認のため、Webサービスからの戻り値をコンソールに出力しています。

	  		// Webサービスの実行
			System.out.println(simpleWebService.add(123000, 456));

EclipseでWebサービスの中身を確認

 作成したJavaプログラムを実行すると、以下のようにサービスからメッセージを取得しコンソールに出力します。

図12 テスト用のWebサービス利用者のJavaプログラムの実行 図12 テスト用のWebサービス利用者のJavaプログラムの実行

Eclipseだと、とても簡単に実装できる

 サンプルクラスは、Webサービスのメソッドに対して、「123000, 456」と引数を与えています。Webサービスの処理は、与えられた引数を加算するので、コンソールには、加算された値「123456」が表示されています。

 以上で、Webサービスの構築は完了です。実際にコードを書くのは、Webサービス利用者のJavaプログラムとWebサービス提供者のJavaプログラムだけであり、双方の通信に関する部分などはすべて自動的に生成されるので、とても簡単にWebサービスの実装ができたと思います。

 次ページでは最後に、実際にどのようなメッセージがやりとりされているか、その中身を確認してみましょう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。