WSDL2WebService ツールを使用した Web サービスの作成

コマンド行から WSDL2WebService ツールを使用すると、IBM® WebSphere® ランタイム環境を 使用して、WSDL ファイルから Web サービスを生成することができます。

始める前に

前提条件:

このタスクについて

このツールは、次の 3 つのステージで使用します。

手順

  1. -createService 引数を指定してツールを実行し、 特定の WSDL 文書で記述される Web サービスの、 スケルトン Java インプリメンテーション・テンプレートを作成します。
  2. テンプレートで実装コードを作成し、ステージ 1 で生成したビルド・スクリプトを使用して、 そのコードをコンパイルします。
  3. -createEar 引数を指定してもう一度ツールを実行し、 この実装から Web サービス対応アーカイブを作成します。

タスクの結果

注: ステージ 1 を複数回実行すると、関連のある Web サービスを 同一のプロジェクト・ディレクトリーに作成することができます。ステージ 3 では、 個々の Web サービスに対して別々のモジュールを作成し、そのモジュールを同じ EAR ファイルに 追加することができます。

コマンド行のセットアップ

このタスクについて

WSDL2WebService ツールを使用する前に、次の手順で、Web サービスのコマンド行を セットアップする必要があります。

手順

  1. コマンド・プロンプトから install_directory/bin に移動します。
  2. 次のバッチ・スクリプトを実行します。
    • Windows: setupenv.bat
    • Linux: . setupenv.sh
  3. Change to the directory where you want to create the web service. このディレクトリーを、コマンド行のテスト・ディレクトリーとして参照します。 Linux: このディレクトリーに対する書き込みアクセス権が必要です。

タスクの結果

これで、WSDL2WebService ツールのステージ 1 を実行できます。

スケルトン Web サービス実装の作成

始める前に

注: WSDL2WebService ツールには 2 つのバージョンがあります。 WSDL2WebService コマンドを実行すると、 J2EE 1.4 が使用されます。J2EE 1.3 を使用する WSDL2WebService13 コマンドを使用することも できます。以下のコマンドのいずれの場合も、J2EE 1.3 を使用する Web サービスを作成する際には、 WSDL2WebServiceWSDL2WebService13 で置換することができます。

このタスクについて

スケルトン Web サービス実装を作成するには、 コマンド・プロンプトで次のように入力します。

  • Windows: WSDL2WebService [<optional arguments>] -project <ProjectDir> -createService <ServiceName> <WSDL URI>
  • Linux: WSDL2WebService.sh [<optional arguments>] -project <ProjectDir> -createService <ServiceName> <WSDL URI>

注: 引数 <WSDL URI> (大/小文字の区別があります) は、最後に置く必要があります。 オプション引数または必須引数のリストについては、WSDL2WebService ツールを 参照してください。

ヒント:
  • オプション引数 -host <hostname:port> を指定することを お勧めします。このコマンドのデフォルト・ポートは 6080 ですが、WebSphere Application Server のデフォルト・ポートは 9080 です。
  • -project で指定するコマンド行テスト・ディレクトリーのパスと名前をメモしてください。この情報は、Web サービスのテストとデプロイのために必要になります。

-createService <ServiceName> 引数を指定して ツールを実行したら、複数のサブディレクトリーを含む <ServiceName> という名前のディレクトリーが、 指定したプロジェクトの下に作成されます。これらのサブディレクトリーには、Web サービス実装の 作成に必要な Java テンプレートが すべて含まれています。

これは、WSDL2WebService ツールの使用方法の一例です。

WSDL2WebService -createService ejb1Service -project dir:¥myproj¥ejbDir -host localhost:9080 -contextRoot ejb1Service -type EJB -verbose dir:¥TempConv.wsdl

実装コードのコンパイル

このタスクについて

スケルトン Java ファイルは、作成する Web サービスを正しく実装するように、 変更する必要があります。Java スケルトンに 正しいコードを追加したら、今度はそれをコンパイルする 必要があります。このコードすべてをコンパイルするのに役立つ、 compile と呼ばれるビルド・スクリプトも生成されます。

実装コードをコンパイルする手順は、 次のとおりです。

手順

  1. <ServiceName> ディレクトリーに移動します。
  2. 実装コードに、JAR ファイルや、.class ファイルを含むディレクトリーなどの 依存性がある場合は、コンパイル・スクリプトを編集して、これらの依存性の絶対パス名を、 USER_CLASSPATH 変数に追加します。以下に例を示します。
    • Windows: set USER_CLASSPATH = c:¥MyJars¥webservice.jar;c:¥MyClasses
    • Linux: USER_CLASSPATH = /home/MyJars/webservice.jar:/home/MyClasses
  3. 次のコマンドを入力します。
    • Windows:  compile
    • Linux:  compile.sh
    このコマンドの実行には、パラメーターは不要です。

Web サービス対応アーカイブの作成

このタスクについて

サービスを作成し、実装コードを Java スケルトンに 追加し、新しいコードをコンパイルしたら、Web サービス対応アーカイブを作成する 必要があります。Web サービス対応アーカイブを作成するには、コマンド・プロンプトで 次のように入力します。

  • Windows: WSDL2WebService [<optional arguments>] -createEar <File.ear> -project <ProjectDir>
  • Linux: WSDL2WebService.sh [<optional arguments>] -createEar <File.ear> -project <ProjectDir>

オプション引数または必須引数の説明については、WSDL2WebService ツールを 参照してください。

ヒント: Web サービスのテストとデプロイを行う場合は、 -project で指定するコマンド行テスト・ディレクトリーのパスと名前を メモしてください。

実装コードを作成し、コンパイルして、-createEar <File.ear> 引数を指定してツールをもう一度実行した場合、出力は、 新規 EAR ファイルか更新済みの EAR ファイルです。ここには、-add 引数で指定した各 Web サービス名の Web サービス・モジュールが含まれます。また、Web サービスを実装するサーバー・サイド・クラスが、WEB-INF¥classes ディレクトリーに移動していますが、 これが正常な場所です。 -server-side-only 引数を指定しない場合は、 追加の Java ファイル (複合型の シリアライザー・クラス、デシリアライザー・クラスなど) が含まれるクライアント・サイド・ディレクトリーも 作成されます。

EAR ファイルを生成したら、それをサーバーにデプロイして、 他の人に利用してもらうことができます。デプロイについては、 コマンド行ツールを使用した Web サービスのサーバーへのデプロイを参照してください。

次に挙げるのは、Web サービス対応アーカイブの作成方法の一例です。
WSDL2WebService -createEAR dir:¥myear¥ejb1ear.ear -project dir:¥myproj¥ejbDir -add ejb1Service -verbose localhost:9080/ejb1Service/services/TempConv
1 つのプロジェクトで複数の Web サービスを作成し、それを 1 つのアーカイブにマージする場合は、 WSDL2WebService ツールの説明に従って、 -rootModule オプションを使用します。例えば、2 つの Java Bean Web サービス (AddressBook と Echo) が MultiService という プロジェクトにある場合、この 2 つの Web サービスを 1 つのモジュールに マージおよび保存するには、次のコマンドを発行します。
WSDL2WebService -createEar dir:¥myear¥ejb1ear.ear -rootModule ejb1Service/services/Service -host localhost:9080 -project dir:¥myproj¥MultiService
これで MultiServiceEAR.ear が作成され、 そこには、マージされた Web サービスを含む単一のモジュール Service_WEB.war が入っています。 このモジュールのコンテキスト・ルートは Service_WEB です。WSDL ファイル内のすべてのサービス・エンドポイントの ホスト名とポート番号は、localhost:9080 に変更されます。
注: Web サービスのマージ中は、 クラス名の競合検査は行われません。完全修飾クラス名が 複数の異なる Web サービスにわたって衝突しないようにしてください。

コードの再利用のサポート

このタスクについて

WSDL2WebService ツールは、(1 つ以上の含まれている Web サービスによってアクセスされる) JAR または EJB ファイルを EAR ファイルのルートに配置できるようにすることにより、コードの再利用をサポートします。すべてのクラスをサービスと同じ名前の JAR ファイルに保存することにより、Web サービス実装を再利用できます。これらのクラスを JAR ファイルに保存するには次のステップを実行します。

手順

  1. WSDL2WebService ツールを実行したら、再利用する JAR ファイルを プロジェクト・ディレクトリーのルートに置きます。このファイルは、 JAR ファイルでも EJB ファイルでもかまいません。
  2. プロジェクト内の Web サービスがこれらの JAR ファイルのいずれかを必要とする場合は、 それぞれの Web サービスで、絶対パスを JAR ファイルに追加して、 そのコンパイル・スクリプト内の USER_CLASSPATH 変数を更新します。
  3. 個々の Web サービスを通常の方法でコンパイルします。
  4. WSDL2WebService ツールを、-createEAR 引数を指定して通常の方法で実行します。 WSDL2WebService ツールは、自動的に JAR ファイルを EAR ファイルに追加し、 その JAR ファイルへのすべての参照を更新します。

次のタスク

重要:
  • WSDL2WebService コマンドを実行し、 ローカル・インポートを実行する WSDL ファイルのセットを使用して EJB Web サービスを作成すると、 EAR ファイルが生成されますが、それをワークスペースにインポートし、 単体テスト環境またはリモート・サーバーにデプロイすると、 サーバーの始動時に例外が発生します。この例外は、ルーターの Web プロジェクトに WSDL が欠落しているために起こります。 このエラーを防ぐためには、次のいずれかを実行してください。
    • 管理コンソールを使用して、スタンドアロンの WebSphere Application Server にデプロイします。
    • モノリシック WSDL を使用します。-splitWsdl 引数は使用しないでください。
    • EJB プロジェクト内の META-INF/wsdl ディレクトリーにある すべての WSDL ファイルを、ルーター Web プロジェクトの WEB-INF/wsdl に、 手動でコピーします。
  • -genResolver 引数を選択すると、EAR を開始できません。 問題は、-genResolver オプションが、WSDL 文書が <wsdl:import> を使用して XSD をインポートするようなケースを処理できないことにあります。この問題を回避するためには、次のいずれかを実行してください。
    • WSDL を編集して、XSD のインポートに <types><schema><import> を使用する ようにします。
    • コマンド行ツールでは、-genResolver オプションを使用しません。

クライアント実装コードのコンパイル

このタスクについて

クライアント・コードをコンパイルする手順は、次のとおりです。

手順

  1. <ProjectDir> ディレクトリーに移動し、次に client-side ディレクトリーに 移動します。
  2. 実装コードに、.jar ファイルや、.class ファイルを含むディレクトリーなどの 依存性がある場合は、コンパイル・スクリプトを編集して、これらの依存性の絶対パス名を、 USER_CLASSPATH 変数に追加します。 例:
    • Windows: set USER_CLASSPATH = c:¥MyJars¥webservice.jar;c:¥MyClasses
    • Linux: USER_CLASSPATH = /home/MyJars/webservice.jar:/home/MyClasses
  3. 次のコマンドを入力します。buildclient_new

フィードバック