本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

IDEを使用せずにWebサービスを開発する 第2回:コマンド・ラインで"Hello World!" Webサービス・クライアントを作成する

Alec Go, Software Engineer , IBM
Alec GoはIBMのソフトウェアエンジニアで、WebSphere Application Serverのレベル2のサポートを担当しています。ペンシルベニア州立大学でコンピュータ工学の学士号を取得し、優秀な成績で卒業しました。

概要: WSDL2Javaコマンドを使用して、簡単な"Hello World!"スタンドアロンJavaアプリケーションWebサービス・クライアントを作成します。さらに、TCPMonitorを使用してHTTPメッセージをトレースする方法についても学びます。

日付:  2006年 1月 24日
レベル:  中級 この記事の原文:  英語
アクティビティー: 1679 ビュー
お気軽にご意見・ご感想をお寄せください: 


はじめに

このシリーズの 第1回 では、コマンド・ラインからWebサービス・プロバイダーを作成する方法について重点的に説明しました。シリーズ第2回のこの記事では、WSAD(WebSphere ® Studio Application Developer)やRAD(Rational ® Application Developer)などのIDE(Integrated Development Environment)を使用せずにWebサービス・クライアントを開発する方法について学びます。Webサービス・クライアントの作成がいかに簡単かおわかりいただけるでしょう。その過程でJava ™ コンパイラーとWSDL2Javaの使用方法を学びます。TCPMonitorのデモによってHTTPメッセージのトレース方法を説明します。

この記事では以下の前提条件が必要です。

  • Windowsベースのオペレーティング・システム
  • WebSphere Application Server 5.xまたは6.x。 試用版 をダウンロードして、この記事の手順に従ってください。

準備

第1回 をお読みになっていない方は、WebSphere Application ServerのAdministration Consoleを使用して、「 ダウンロード 」のセクションにリンクされているWARファイルをインストールしてください。第1回から引き続いてこの記事をお読みになっていて、WARファイルをインストール済みの場合は、この手順を飛ばしてください。WARファイルをインストールするには、以下の手順を実行します。

Applications -> Enterprise Applications -> Install の順に選択します。Local Pathには HelloWorld.war の場所を指定します。Context Rootには HelloWorldWAR を指定します。


図1. Admin Consoleの表示
図1. Admin Consoleの表示

WSDLファイルを初めて作成したときに、ロケーションのパラメーターは"http://localhost:9080/HelloWorldWAR/services/HelloWorld"に設定されます。したがって、Context Rootは"HelloWorldWAR"となっているはずなので、手動で変更しなくてもWSDLファイルを使用してクライアントを生成することができます。

各種設定はすべてデフォルトのまま Next をクリックして手順を進めて、WARのインストールを終了します。変更はすべて保存してください。ここで最も重要な手順はWARファイルを起動することです。この手順を忘れないようにしてください。


クライアントを作成する

Webサービス・プロバイダーが正常に起動しているのを確認したら、クライアントを作成することができます。基本的な手順は以下の3つです。

  • WSDLからクライアント・スタブを 作成 する
  • スタブを使用するJavaクラスを 開発 する
  • Javaファイルをコンパイルしてクライアントを 実行 する

WSDLからクライアント・スタブを作成する

Webサービス・プログラミング・モデルの特長は、リモート・メソッドの呼び出しが容易なことです。WSDLを使用してスタブを作成し、次にスタブを使用してクライアント側のリモート・オブジェクトを表現します。

A) ディレクトリー(c:\temp\Client)を作成します。第1回で作成したHelloWorld.wsdlをコピーするか、「 ダウンロード 」のセクションからダウンロードしてください。

B) コマンド行プロンプトを開き、c:\temp\Clientに移動します。以下のコマンドを入力します。


リスト1.コマンド行プロンプトの設定
                
SET WAS_HOME=C:\Program Files\WebSphere\AppServer5.1

call "%WAS_HOME%\bin\setupcmdline.bat"	
			

1行目では"WAS_HOME"環境変数をWebSphere Application Serverのインストール先に設定します。ここで正しいディレクトリーを指すようにしてください。2行目ではJAVA_HOMEなどの追加環境変数を設定するスクリプトを呼び出します。

C) WSDL2Javaコマンドを使用してクライアント・スタブを作成します。


リスト2.WSDL2Javaの実行
                
call "%WAS_HOME%\bin\WSDL2Java" -role client -verbose -output . HelloWorld.wsdl
			

使用するオプションについて、以下に説明します。

  • Role - serverまたはclientを指定します。ここではクライアントを構築しますので、clientと指定します。
  • Verbose - 手順ごとにコンソールに対してメッセージを出力します。
  • Output - ここではピリオドを入力して現行ディレクトリーを指定します。
  • WSDL file - 最後の引数は常にこれです。

このコマンドを実行すると、コンソールに以下のように表示されます。


リスト3.WSDL2Javaからの出力
                
WSWS3185I: Info: Parsing XML file:  HelloWorld.wsdl
WSWS3282I: Info: Generating .\mypackage\HelloWorld.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldSoapBindingStub.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldService.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceLocator.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceInformation.java.
			

上記のファイルを含むmypackageというディレクトリーが作成されたのに気づいたことでしょう。各ファイルについての詳細を以下に説明します。

  • HelloWorld.java - これはService Endpoint Interfaceです。
  • HelloWorldSoapBindingStub.java - これはService Endpoint Interfaceの実装です。
  • HelloWorldService.java - これはService Interfaceです。
  • HelloWorldServiceLocator.java - これはService Interfaceの実装です。

ここでコンセプトとして次のことを理解しておく必要があります。

  • Service Endpoint Interface :HelloWorldSoapBindingStubはHelloWorldを実装する
  • Service Interface :HelloWorldServiceLocatorはHelloWorldServiceを実装する

これらについては次のセクションでクライアントを構築する際にさらに詳しく説明します。


スタブを使用するJavaクラスを開発する

★次の手順では、生成されたスタブを利用できるクラス・ファイルを作成します。"mypackage"ディレクトリー内に、HelloWorldClient.javaと名前を付けたファイルを作成します。以下のコードをペーストしてください。


リスト4.HelloWorldClient.java
                
package mypackage;

public class HelloWorldClient {
    public static void main(String[] args) throws Exception
    	{
	HelloWorldServiceLocator hwlocator = new HelloWorldServiceLocator();
	HelloWorld hw = hwlocator.getHelloWorld();
	String str = hw.sayHello();
	System.out.println(str);
	}
}
			

たったの3行でWebサービスを呼び出していることに注目してください。各行について以下に説明します。

A) HelloWorldServiceLocatorはサービス・オブジェクトです。サービス・オブジェクトは簡単に言うと、生成されたスタブの取得に用いられます。サービス・オブジェクトは以下の行で作成されます。


リスト5.HelloWorldServiceLocatorの作成
                
HelloWorldServiceLocator hwlocator = new HelloWorldServiceLocator();
			

サービス・オブジェクトの名前は常に*サービス名*Locatorとなります。*サービス名*はWSDLファイルのサービスの名前です。

注:J2EEのコンテキスト(サーブレット内またはEJB内)では、サービス・オブジェクトはJNDIを使用して取得する必要があります。ここではJ2SEクライアントを使用していますので、サービス・オブジェクトの取得にはこの方法しかありません。

B) 次に、クライアント・スタブを作成する必要があります。スタブはリモート・オブジェクトを表現します。スタブは以下のように取得します。


リスト6.スタブの取得
                
HelloWorld hw = hwlocator.getHelloWorld();
			

ポートを取得するメソッドは常にget*ポート名*となることに注目してください。*ポート名*はWSDLファイルのポートの名前です。

C) 最後に、スタブ上でリモート・メソッドを呼び出します。ここでは、スタブ上でsayHelloメソッドを使用して、戻り値をStringに書き込みます。


リスト7.スタブ上でのメソッド呼び出し
                
String str = hw.sayHello();
			


コンパイルしてクライアントを実行する

次の手順では実際にクライアントをコンパイルします。コンパイルするには以下のコマンドを発行します。


リスト8.クラスのコンパイル
                
"%JAVA_HOME%\bin\javac" -extdirs "%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage\*.java
			

クラス・ファイルがmypackageディレクトリーに作成されます。最後にJavaアプリケーションを実行します。


リスト9.Javaアプリケーションの実行
                
"%JAVA_HOME%\bin\java" 
	-Djava.ext.dirs="%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage.HelloWorldClient
			

コンソールに"Hello World!"というメッセージが表示されます。おめでとうございます! クライアントからWebサービスを呼び出せました。


TCPMonitorによるトレースの設定

ケーブルを行き交うデータを検証する手順について付け加えておきましょう。WebSphere Application Serverには、HTTPメッセージをトレースするためのTCPMonitorというツールが付属しています。TCPMonitorはクライアントとサーバーとの間に置いて使用します。現在、クライアントはサーバーと直接対話しています。これを、クライアントがTCPMonitorと対話し、TCPMonitorからサーバーにトラフィックを転送するように変更します。

A) TCPMonitorを利用するには、まずクライアントを変更する必要があります。HelloWorldClient.javaを以下のように編集します。


リスト10.HelloWorldClient.java
                
package mypackage;
import javax.xml.rpc.Stub;
public class HelloWorldClient {
    public static void main(String[] args) throws Exception
    	{
	HelloWorldServiceLocator hwlocator = new HelloWorldServiceLocator();
	HelloWorld hw = hwlocator.getHelloWorld();
	((Stub) hw)._setProperty("javax.xml.rpc.service.endpoint.address",
		"http://localhost:1234/HelloWorldWAR/services/HelloWorld");
	System.out.println(hw.sayHello());
	}
}
			

クライアントがトラフィックを送信するエンドポイントを変更するために、((Stub) hw)._setProperty("javax.xml.rpc.service.endpoint.address", "http://localhost:1234/HelloWorldWAR/services/HelloWorld");の行が追加されています。エンドポイントのデフォルトのアドレスはHelloWorldServiceLocator.javaファイルに次の行で指定されています。private final java.lang.String helloWorld_address = "http://localhost:9080/HelloWorldWAR/services/HelloWorld";

ポートを9080から1234へと変更したことに注目してください。さらに、HelloWorldインスタンスをスタブ・オブジェクトにキャストするために、java.xml.rpc.Stubクラスをインポートする必要があります。

B) TCPMonitorを実行する際に重要なのは、WebSphere Application Serverに付属しているバージョンのJavaを使用することです。そうしないと、NullPointerExceptionを受け取る可能性があります。以下のコマンドを発行してください。


リスト11.TCPMonの実行
                
"%JAVA_HOME%" -Djava.ext.dirs="%WAS_EXT_DIRS%" com.ibm.ws.webservices.engine.utils.tcpmon	
			

C) 以下の値を指定します。


リスト12.TCPMonの値
                
Listen Port - 1234
Target Hostname - localhost
Target Port # - 9080
			

ウィンドウは下図のようになります。


図2. TCPMonitorの値の設定
図2. TCPMonitorの値の設定

次に、Addボタンをクリックします。これで、TCPMonitorがポート1234でトラフィックを受け入れ、9080にリダイレクトするように構成されます。Addボタンをクリックすると、自動的にリスナーが実行されます。TCPMonitorの上部には、リスナーを示すタブが表示されます。

D) Webサービス・クライアントを再コンパイルして呼び出すために、以下のコマンドを入力します。


リスト13.HelloWorldClientの実行
                
"%JAVA_HOME%\bin\javac" 
	-extdirs "%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage\*.java
"%JAVA_HOME%\bin\java" 
	-Djava.ext.dirs="%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage.HelloWorldClient	
			

E) TCPMonitorのウィンドウでトラフィックを調べます。SOAPのエンベロープは1行で表示されます。Webサービスのエンジンは、スペース節約のために改行文字を送信しません。


図3. TCPMonitorの出力
図3. TCPMonitorの出力

F) XMLを読みやすくするために、tcptrace.xmlというファイルを新規作成して、そこにXMLを貼り付けるという手もあります。次にMozilla FirefoxまたはMicrosoft Internet ExplorerでそのXMLファイルを開けば、書式が整えられたファイルを見ることができます。


まとめ

Webサービス・プログラミング・モデルを使えば、スタブを生成し、そのスタブを使用してクライアント・アプリケーションからWebサービスを起動するように設定するのは、とても簡単です。ここで説明したクライアント構築方法を適用できるWebサービスは現在たくさんあります。現在、Google、Amazon、Ebay、Fedexなどの大手サイトでは利用可能なWebサービスを提供しています。ぜひ楽しんでください。


付録A:クライアントを自動的に構築する

ダウンロード のセクションからダウンロードできるWebServiceTutorial.batを使えば、蒸気の手順を自動化することができます。まず、WebServiceTutorial.batを修正して、WAS_HOMEディレクトリーが現在のWASのインストール先ディレクトリーを指すようにします。次に、バッチ・ファイルを実行します。その出力は以下のようになります。


リスト14.WebServiceTutorial.batの出力
                
1. Creating Binding Classes...
WSWS3185I: Info: Parsing XML file:  HelloWorld.wsdl
WSWS3282I: Info: Generating .\mypackage\HelloWorld.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldSoapBindingStub.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldService.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceLocator.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceInformation.java.
2. Compiling Java Client...
3. Running Java Client...
Hello World!
			



ダウンロード

内容ファイル名サイズダウンロード形式
Hello World WAR file to install on server sideHelloWorld.war6KBHTTP
Hello World WSDL fileHelloWorld.wsdl3KBHTTP
Script to build the client automaticallyWebServiceTutorial.bat1KBHTTP
Final codeFinish.zip14KBHTTP

ダウンロード形式について


参考文献

学ぶために

製品や技術を入手するために

議論するために

著者について

Alec GoはIBMのソフトウェアエンジニアで、WebSphere Application Serverのレベル2のサポートを担当しています。ペンシルベニア州立大学でコンピュータ工学の学士号を取得し、優秀な成績で卒業しました。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and Web services, WebSphere
ArticleID=242142
ArticleTitle=IDEを使用せずにWebサービスを開発する 第2回:コマンド・ラインで"Hello World!" Webサービス・クライアントを作成する
publish-date=01242006
author1-email=alecgo@us.ibm.com
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。