いまさら聞けない「Webサービス」の常識:企業システムの常識をJBossで身につける(6)(3/4 ページ)
企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!
【3】EclipseでJavaクラスからWSDL、Webサービスのインターフェイス実装コードを自動生成
WSDLからWebサービスのインターフェイス実装コードを自動生成する際に、JBoss 5.0 Serverが必要になるので、起動しておきます。
SimpleWebService.javaを右クリックし、[Webサービス]→[Webサービスの作成]を選択します。
繰り返しますが、今回はボトムアップでWebサービスを作成するので、同時にWebサービスのインターフェイスを実装したコードも自動生成してくれます。従って、この作業により「WSDL⇒Webサービスのインターフェイス実装コード」という流れの自動生成ができます。[Web サービス]ダイアログで以下のように入力してください。
- [Webサービス・タイプ]:ボトムアップ Java bean Web サービス
- [サービス実装]:web.service.test.SimpleWebService
- [クライアントタイプ]:Java プロキシー
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 | 通信に必要な具体的な処理が実装されているクラス |
表 自動生成されたクラスのソース一覧 |
【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(); } } }
サンプルでは、まず以下の部分でWebサービスを取得しています。SimpleWebServiceクラス、SimpleWebServiceServiceLocatorクラスは、図11にあった自動的に生成されたクラスを使用しています。
// Webサービスの取得 SimpleWebService simpleWebService = new SimpleWebServiceServiceLocator().getSimpleWebService();
次に、Webサービスを実行しています。動作確認のため、Webサービスからの戻り値をコンソールに出力しています。
// Webサービスの実行 System.out.println(simpleWebService.add(123000, 456));
EclipseでWebサービスの中身を確認
作成したJavaプログラムを実行すると、以下のようにサービスからメッセージを取得しコンソールに出力します。
Eclipseだと、とても簡単に実装できる
サンプルクラスは、Webサービスのメソッドに対して、「123000, 456」と引数を与えています。Webサービスの処理は、与えられた引数を加算するので、コンソールには、加算された値「123456」が表示されています。
以上で、Webサービスの構築は完了です。実際にコードを書くのは、Webサービス利用者のJavaプログラムとWebサービス提供者のJavaプログラムだけであり、双方の通信に関する部分などはすべて自動的に生成されるので、とても簡単にWebサービスの実装ができたと思います。
次ページでは最後に、実際にどのようなメッセージがやりとりされているか、その中身を確認してみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.