WSDL ドキュメントからの Java コードの生成

WSDL2Java ツールは、Web サービスの WSDL ドキュメントの情報に基づいて Web サービスプロキシおよびスケルトンのコードを生成します。プロキシとは、実際の Web サービスと同じインターフェイスを持つローカルオブジェクトのことです。これを使用すると、Web サービスがローカルオブジェクトであるかのように呼び出すことができます。WSDL2Java は、RPC エンコードされていてドキュメントリテラルで、しかもドキュメントエンコードされた SOAP エンコードスタイルを指定する WSDL ドキュメントからプロキシを生成します。

スケルトンとは、新規 Web サービス実装のテンプレートのことです。スケルトンを生成しておけば、後は独自のコードを追加するだけで実装を完成できます。

WSDL2Java のコマンドラインスイッチの詳細については、 「WSDL2Java のコマンドラインスイッチ」 を参照してください。

Web サービスプロキシの生成

このセクションでは、Web サービスプロキシを作成する方法について説明します。JSP ベースのクライアントからのプロキシの呼び出しについては、 「プロキシクライアント」 を参照してください。

Web サービスのプロキシコードを生成するには

  1. Web サービスの WSDL ドキュメントを取得します。

    Axis ベースの Web サービスの WSDL ドキュメント生成方法の詳細については、 「パブリッシュ済み Web サービスからの WSDL の生成」 を参照してください。

  2. コマンドプロンプトで、次のいずれかの方法で WSDL2Java ツールを実行します。
    cd <JRun のルートディレクトリ>¥bin
    wsdl2java -v -o <出力ディレクトリのローカルパス>/<ファイル名>.wsdl
    

    または

    java -classpath "<JRun のルートディレクトリ>/lib/jrun.jar;<JRun のルート ディレクトリ>/lib/webservices.jar" org.apache.axis.wsdl.WSDL2Java -v -o <出力ディレクトリのローカルパス>/ <ファイル名>.wsdl

    ここで、

メモ:  Axis ベースの Web サービスでは、手順 2 のコマンドラインの URL として <ローカルパス>/<ファイル名>.wsdl を使用する代わりに、 「パブリッシュ済み Web サービスからの WSDL の生成」 で説明しているように、WSDL 引数を持つ Web サービスのエンドポイント URL を使用できます。

生成したプロキシコードの確認

WSDL2Java は次のプロキシファイルを生成します。
ファイル
説明
<サービス名>Locator.java
このクラスはプロキシのインスタンスを取得するファクトリの役割をします。これは、<サービス名>.java インターフェイスを実装します。これは WSDL ファイルのサービス名から生成されます。
このクラス名は、WSDL ドキュメント内のサービス名に接頭辞 Locator を付けたものです。WSDL ファイルに 2 つ以上のサービスがリストされている場合は、サービスごとに 1 つのクラスが生成される必要があります。このクラス内の get メソッドを使用して、web service インターフェイスを実装するスタブオブジェクトを取得します。
<サービス名>.java
これは、<サービス名>Locator.java クラスが実装するファクトリインターフェイスです。
このインターフェイス名は、WSDL ドキュメント内のサービス名から付けられます。
<サービスポート名>.java
(エンコードされた WSDL の
場合)
<サービスバインド名>.java
(リテラル WSDL の場合)
このインターフェイスには、各 Web サービスオペレーションのメソッド署名が含まれています。
このインターフェイス名は、WSDL ドキュメント内のポート名やバインド名から付けられます。
<サービスバインド名>Stub.java
これは、Web サービスプロキシクラスです。これは、Axis クライアント API を使用して Web サービス呼び出しを行う <サービスポート名>.java インターフェイスを実装します。
このクラス名は、サービスバインド名に接頭辞 Stub を付けたものです。

複雑なデータタイプを指定する WSDL ドキュメントでは、WSDL2Java はこれらのタイプを表す JavaBeans クラスを生成します。Axis が JavaBeans を使用する方法の詳細については、 「Axis bean シリアライザによるデータタイプマッピング」 を参照してください。

WSDL ドキュメントでは、入力と出力の両方に使用する in-out パラメータ、および出力のみに使用する out パラメータも指定できます。Java では inout および out パラメータを直接サポートしていないので、必要な場合は、WSDL2Java はホルダークラスを生成します。これを使用するとサービスはパラメータを変更し、クライアントに返すことができます。ホルダークラスを必要とする各クラスに対して、WSDL2Java は同じベース名を持つホルダークラスをそれぞれ生成します。たとえば、MyClass というクラスは、MyClassHolder というホルダークラスを持ちます。

Web サービススケルトンの生成

デフォルトで WSDL2Java が生成するプロキシコードに加えて Web サービススケルトンコードを生成するには、-s または --skeleton スイッチを使用します。

このセクションでは、Web サービススケルトンを作成する方法について説明します。

Web サービススケルトンコードを生成するには

  1. Web サービスの WSDL ドキュメントを取得します。Axis ベースの Web サービスの WSDL ドキュメント生成方法の詳細については、 「パブリッシュ済み Web サービスからの WSDL の生成」 を参照してください。
  2. コマンドプロンプトで、次のいずれかの方法で WSDL2Java ツールを実行します。
    cd <JRun のルートディレクトリ>¥bin
    wsdl2java -v -o -s <出力ディレクトリのローカルパス>/<ファイル名>.wsdl 
    

    または

    java -classpath "<JRun のルートディレクトリ>/lib/jrun.jar: <JRun のルートディレクトリ>/lib/webservices.jar" org.apache.axis.wsdl.WSDL2Java -v -o -s <出力ディレクトリのローカルパス>/<ファイル名>.wsdl

    ここで、

メモ:  Axis ベースの Web サービスでは、手順 2 のコマンドラインの URL として <ローカルパス>/<ファイル名>.wsdl を使用する代わりに、 「パブリッシュ済み Web サービスからの WSDL の生成」 で説明しているように WSDL 引数を持つ Web サービスのエンドポイント URL を使用できます。

生成したスケルトンコードおよびデプロイ情報の確認

WSDL2Java は次のスケルトンファイルを生成します。
ファイル
説明
<サービス名>SoapBindingSkeleton.java
これは、Web サービスとしてデプロイ
するクラスです。
<サービス名>SoapBindingImpl.java
これは、独自の実装コードを追加する実装
クラステンプレートです。
deploy.wsdd
このファイルには、Web サービスの
デプロイメントディスクリプタである server-config.wsdd ファイルにコピー
アンドペーストができる WSDD service
要素が含まれています。

複雑なデータタイプを使用する Web サービスでは、WSDL2Java はこれらのタイプを表す JavaBeans クラスを生成します。Axis が JavaBeans を使用する方法の詳細については、 「Axis bean シリアライザによるデータタイプマッピング」 を参照してください。

WSDL ドキュメントは、入力と出力の両方に使用する inout パラメータ、および出力のみに使用する out パラメータを指定できます。Java では inout および out パラメータを直接サポートしていないので、必要な場合は、WSDL2Java はホルダークラスを生成します。これを使用するとパラメータは入力値と出力値の両方を含むことができます。ホルダークラスを必要とする各クラスに対して、WSDL2Java は同じベース名を持つホルダークラスをそれぞれ生成します。たとえば、MyClass というクラスは、MyClassHolder というホルダークラスを持ちます。

WSDL2Java のコマンドラインスイッチ

WSDL2Java ツール用の次の二重ダッシュ (--) またはダッシュ (-) バージョンのコマンドラインスイッチを使用できます。
スイッチ
説明
--help、-h
使用方法をプリントします。
--verbose、 
-v
ツールが生成するものに関する情報メッセージを生成時に
プリントします。
--skeleton、-s
新規 Web サービスのスケルトンコードを生成します。
--skeletonDeploy、
-S<true または false>
スケルトンをデプロイするか、実装クラスをデプロイするかを指定します。この値が false の場合は、WSDL2Java は
実装クラスを使用します。
--NStoPkg、 
-N <argument>=<value>
Java パッケージとネーム空間をマッピングします。
デフォルトでは、パッケージ名は WSDL ドキュメントのネーム空間文字列から生成されます。固有のネーム空間
マッピングごとに --NStoPkg 引数を使用して、独自のマッピングを提供できます。たとえば、"urn:AddressFetcher2" という WSDL ドキュメントにネーム空間があり、このネーム空間内のオブジェクトから生成したファイルをパッケージ samples.addr に配置する場合は、次のスイッチを WSDL2Java に指定します。
--NStoPkg urn:AddressFetcher2=samples.addr
WSDL ドキュメントに多くのネーム空間がある場合は、
それらすべてのマッピングをリストするのに時間がかかる
場合があります。コマンドラインを簡潔にするために、WSDL2Java はデフォルトのパッケージ (パッケージなし) 内にある NStoPkg.properties と呼ばれるファイル内でもマッピングを検証します。このファイルのエントリは、--NStoPkg コマンドラインスイッチの引数と同じ形式です。たとえば、上記のようにコマンドラインスイッチを指定する代わりに、同じ情報を NStoPkg.properties に与えることができます。
urn¥:AddressFetcher2=samples.addr
(プロパティファイルではコロンをエスケープする必要があります。)
指定されたマッピングのエントリがコマンドラインと
プロパティファイルの両方にある場合は、コマンドラインのエントリが優先されます。
--package、
-p <パッケージ名>
すべての名前空間とパッケージのマッピングを変更して、
代わりに指定されたパッケージ名を使用します。
--output、
-o <ディレクトリ>
指定された出力ディレクトリにファイルを生成します。
--deployScope、
-d <引数>
生成された WSDD ファイル (deploy.wsdd) に、Application、Request、または Session のスコープを追加します。
このスイッチを使用しない場合は、deploy.xml ファイルに
スコープタグが現れず、AXIS のランタイムデフォルト設定は Request スコープとなります。
--testCase、-t
クライアントサイド JUnit テストケースを生成します。
--noImports、-n
コマンドラインに表示されるドキュメント専用のコードを
生成します。デフォルトの動作では、すべての WSDL
ドキュメントのファイル、直接のファイル、および
インポートされたファイルが生成されます。
--all、 
-a
参照されなかった要素を含むすべての要素のコードを生成
します。
--debug、-D
デバッグ情報を表示します。