JAX-RPC を使用した暗黙の SOAP ヘッダーの送信
既存の Java™ API for XML-based RPC (JAX-RPC) Web サービス・クライアントで暗黙の SOAP ヘッダー内に値を送信できます。暗黙の SOAP ヘッダーを送信するためにクライアント・コードを変更すると、Web サービスの発信要求内にある特定の情報を送信できます。
始める前に
- Web Services Description Language (WSDL) ファイルのバインディング内の SOAP ヘッダーとして宣言されているメッセージ・パーツ。ただし、メッセージ定義は WSDL ファイル内の portType エレメントによって参照されていない。
- WSDL ファイルに含まれていないエレメント。
ハンドラーおよびサービス・エンドポイントは、SOAP with Attachments API for Java (SAAJ) データ・モデルを使用して、暗黙的または明示的な SOAP ヘッダーを取り扱うことができます。
protected の SOAP ヘッダーを取り扱うことはできません。 その所有コンポーネント (例えば、Web Services Security) によって protected に宣言されている SOAP ヘッダーは、クライアント・アプリケーションからはアクセスできません。 protected の SOAP ヘッダーを操作しようとすると、例外が発生します。
このタスクについて
クライアント・アプリケーションは、プロパティーを Stub または Call オブジェクトに設定して、暗黙の SOAP ヘッダーを送受信します。
手順
タスクの結果
JAX-RPC Web サービス・クライアントが、暗黙の SOAP ヘッダーを送信するよう構成されました。
例
以下のプログラミング例では、Web サービスの要求および応答内で、2 つの要求 SOAP ヘッダーを送信し、1 つの応答 SOAP ヘッダーを受け取る方法を示します。
1 //Create the request and response hashmaps.
2 HashMap requestHeaders=new HashMap();
3 HashMap responseHeaders=new HashMap();
4
5 //Add "AtmUuid1" and "AtmUuid2" to the request hashmap.
6 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid1"),
7 "<AtmUuid1 xmlns=¥"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
8 requestHeaders.put(new QName("com.rotbank.security", "AtmUuid2"),
9 ((IBMSOAPFactory)SOAPFactory.newInstance()).createElementFromXMLString(
10 "x:AtmUuid2 xmlns:x=¥"com.rotbank.security¥"><x:uuid>ROTB-0A01254385FCA09
</x:uuid><x:AtmUuid2>"));
11
12 //Add "ServerUuid" to the response hashmap.
13 //If "responseHeaders" is empty, all the SOAP headers are
14 //extracted from the response message.
15 responseHeaders.put(new QName("com.rotbank.security","ServerUuid"), null);
1617 //Set the properties on the Stub object.
18 stub.setProperty(Constants.REQUEST_SOAP_HEADERS.requestHeaders);
19 stub.setProperty(Constants.RESPONSE_SOAP_HEADERS.responseHeaders);
20
21 //Call the operationon the Stub.
22 stub.foo(parm2, parm2);
23
24 //Retrieve "ServerUuid" from the response hashmap.
25 SOAPElement serverUuid =
26 (SOAPElement) responseHeaders.get(new QName("com.rotbank.security","ServerUuid"));
2728 //Note: "serverUuid" now equals a SOAPElement object that represents the
29 //following code:
30//"<y:ServerUuid xmlns:y=¥"com.rotbank.security¥"><:uuid>ROTB-0A03519322FSA01
</y:uuid></y:ServerUuid.");
行 2 から 3 では、要求および応答 SOAP ヘッダーで使用される新しい HashMap が作成されます。
行 6 から 10 では、AtmUuid1 および AtmUuid2 ヘッダー・エレメントが要求 HashMap に追加されます。
行 15 では、ServerUuid ヘッダー・エレメント名が、ヌル値とともに応答 HashMap に追加されます。
行 18 では、要求 HashMap がスタブ・オブジェクト上のプロパティーとして設定されます。 これにより、AtmUuid1 および AtmUuid2 ヘッダーが、スタブ・オブジェクト上で呼び出されたオペレーションに関連付けられた各要求メッセージに追加されます。
行 19 では、応答 HashMap がスタブ・オブジェクト上のプロパティーとして設定されます。 これにより、ServerUuid ヘッダーが、スタブ・オブジェクト上で呼び出されたオペレーションに関連付けられた各応答メッセージから抽出されます。
行 22 では、Web サービス・オペレーションがスタブ・オブジェクト上で呼び出されています。
行 25 から 26 では、ServerUuid ヘッダーが応答 HashMap から取得されています。 このヘッダーは、Web サービス・エンジンにより、応答メッセージから抽出され、HashMap に挿入されます。