JAX-RPC を使用した暗黙の SOAP ヘッダーの送信

既存の Java™ API for XML-based RPC (JAX-RPC) Web サービス・クライアントで暗黙の SOAP ヘッダー内に値を送信できます。暗黙の SOAP ヘッダーを送信するためにクライアント・コードを変更すると、Web サービスの発信要求内にある特定の情報を送信できます。

始める前に

このタスクを実行するには、暗黙の SOAP ヘッダーを送信できるようにする Web サービス・クライアントが必要です。
暗黙の SOAP ヘッダー は、以下の説明の 1 つに適合する SOAP ヘッダーです。
  • 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 ヘッダーを送受信します。

手順

  1. オブジェクト java.util.HashMap を作成します。
  2. クライアントが送信する暗黙の SOAP ヘッダーごとに、エントリーをオブジェクト HashMap に追加します。 HashMap エントリー・キーは、SOAP ヘッダーの QName です。 HashMap エントリー値は、SAAJ SOAPElement オブジェクト、 または SOAP ヘッダー・エレメント全体の XML テキストを含むストリングのいずれかです。
  3. HashMap オブジェクトをプロパティーとして Stub または Call オブジェクトに設定します。 プロパティー名は、 com.ibm.websphere.webservices.Constants.REQUEST_SOAP_HEADERS です。 このプロパティーの値は HashMap です。
  4. Stub または Call オブジェクトを使用してリモート・メソッドを発行します。 HashMap オブジェクト内のヘッダーは、出力メッセージ内で送信されます。
    以下のいずれかが該当する場合、JAXRPCException エラーが発生する可能性があります。
    • HashMap オブジェクト に QName オブジェクトではないキーが含まれているか、または HashMap オブジェクトにストリングまたは SOAPElement オブジェクトではない値が含まれている場合。
    • HashMap オブジェクトに、所有コンポーネントによって保護されることが宣言されている 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 に挿入されます。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_reqsoaphead
ファイル名:twbs_reqsoaphead.html