3.7.1 スタブの使用
生成されるスタブの内容,およびスタブを使用してSOAPサービスを呼び出す場合の実装について説明します。
- 〈この項の構成〉
(1) スタブの内容
WSDL2Javaコマンドで生成するファイルのうち,クライアントでは次に示すファイル(スタブ)を使用します。
ファイル名 |
内容 |
---|---|
<サービス名>Locator.java |
サービスクラスです。SOAPサービスへの接続情報を保持しています。 |
<ポートタイプ名>.java |
リモートインタフェースです。SOAPサービスで利用できるメソッドを定義しています。 |
<データ型名>.java |
ユーザ定義のデータ型クラスです。メソッドのパラメタや,パラメタのクラスで参照されるデータ型を定義しています。必要に応じて使用します。 |
サービス名はWSDLのwsdl:service要素のname属性の値が設定されます。ポートタイプ名はWSDLのwsdl:portType要素のname属性の値が設定されます。また,データ型名はユーザ定義のデータ型の名前に応じて設定されます。
-
SOAPサービスへの接続先(endpoint)情報を参照および設定できます。このクラスでは次のメソッドを提供します。
表3‒24 サービスクラスのメソッド メソッド名
機能説明
get<ポート名>Address
SOAPサービスへの接続先情報を返します。
戻り値:java.lang.String
get<ポート名>
リモートインタフェースへのオブジェクトポインタを返します。
戻り値:リモートインタフェースへのオブジェクトポインタ
get<ポート名>(java.net.URL portAddress)
指定されたSOAPサービスへの接続先情報を使用して,リモートインタフェースへのオブジェクトポインタを返します。
戻り値:リモートインタフェースへのオブジェクトポインタ
ポート名はWSDLのwsdl:port要素のname属性の値が設定されます。
- 注意事項
-
生成されたスタブの内容は変更しないでください。
-
メソッドを呼び出すことによって,SOAPサービスのオペレーションを呼び出すことができます。
(2) サービス呼び出し処理の実装
スタブを使用してSOAPサービスを呼び出す処理を実装します。次の例では,サービスクラスの例をUserInfoServiceLocator.java,リモートインタフェースの例をUserInfo.javaとしています。
-
クライアントの開始処理を実行し,クライアント識別子を取得します。
ManagementクラスおよびClientIDクラスを使用します。なお,呼び出しごとにこの操作を実行する必要はありません。
(例) ClientID cltID = Management.initializeClient();
ManagementクラスおよびClientIDクラスの使用方法については,「3.7.2 ManagementクラスとClientIDクラスの使用」を参照してください。ManagementクラスおよびClientIDクラスのAPI仕様については,「13. SOAP通信基盤が提供するAPI」を参照してください。
-
クライアント識別子を現在のスレッドに関連づけます。
(例) Management.connectClientIDtoCurrentThread(cltID);
-
サービスクラスのオブジェクトを生成します。
(例) UserInfoServiceLocator uis = new UserInfoServiceLocator();
-
サービスクラスのオブジェクトを使用して,リモートインタフェースのオブジェクトを生成します。
なお,生成,取得したリモートインタフェースのインスタンスは,複数のスレッドで共有できません。
(例) UserInfo ui = uis.getUserInfo();
SOAPサービスへの接続先は,WSDLのwsdl:service要素のsoap:address子要素のlocation属性となります。クライアントプログラム内でSOAPサービスへの接続先情報を取得する場合は,次のように記述します。
(例) String url = uis.getUserInfoAddress();
また,クライアントプログラム内でSOAPサービスへの接続先を変更する場合は,次のように記述します。
(例) java.net.URL endpoint = new java.net.URL("http://hostname:8080/WebApp1/services/UserInfo"); UserInfo ui = uis.getUserInfo(endpoint);
-
リモートインタフェースのオブジェクトのメソッドを呼び出して,SOAPアプリケーションのオペレーションを実行します。
(例) String name = ui.getName();
実装例の全体は,「4.1.8 クライアント側の処理を実装する」を参照してください。
なお,DeployScopeが「Session」となっているSOAPサービスを呼び出すクライアントプログラムを実装する場合,SOAPサービスのJavaインタフェースのインスタンスは,JSPやサーブレットが呼び出されるたびに,ローカル変数に生成してください。初期化や呼び出し時に,インスタンスを生成後,それをメンバ変数に退避して,複数のスレッドで共有すると,DeployScopeの「Session」が有効にならない場合があります。なお,DeployScopeが「Session」の場合は,クライアントプログラムからの呼び出し単位で,セッションが切り替わります。
このセッションは,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」で記述している「J2EEサーバ間のセッション情報の引き継ぎ」には対応していません。