検索
連載

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

企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!

PC用表示 関連情報
Share
Tweet
LINE
Hatena

【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.

ページトップに戻る