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

既存の Java™ API for XML-Based Web Services (JAX-WS) 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 ヘッダーを取り扱うことができます。

JAX-WS を使用する場合、操作できるヘッダーのタイプに制限はありません。

このタスクについて

クライアント・アプリケーションは、プロパティーを Dispatch または Proxy オブジェクトに設定して、暗黙の SOAP ヘッダーを送受信します。

手順

  1. オブジェクト java.util.HashMap<QName, List<String>> を作成します。
  2. クライアントが送信する暗黙の SOAP ヘッダーごとに、エントリーをオブジェクト HashMap に追加します。 HashMap エントリー・キーは、SOAP ヘッダーの QName です。 HashMap エントリー値は、List<String> オブジェクトであり、 各ストリングは SOAP ヘッダー・エレメント全体の XML テキストです。 List<String> オブジェクトを使用することによって、それぞれに同じ QName オブジェクトがある複数の SOAP ヘッダー・エレメントを追加できます。
  3. HashMap オブジェクトをプロパティーとして Dispatch または Proxy オブジェクトの要求コンテキストに設定します。 プロパティー名は、com.ibm.wsspi.websvcs.Constants.JAXWS_OUTBOUND_SOAP_HEADERS です。 このプロパティーの値は HashMap です。
  4. Dispatch または Proxy オブジェクトを使用してリモート・メソッド呼び出しを発行します。 HashMap オブジェクト内のヘッダーは、出力メッセージ内で送信されます。
    以下のいずれかが該当する場合、WebServiceException エラーが発生します。
    • HashMap オブジェクトに QName オブジェクトでないキーが含まれているか、 または HashMap オブジェクトに List<String> オブジェクトでない値が含まれている場合。
    • SOAP ヘッダーを表すストリングが、準拠している XML メッセージではありません。
    • HashMap が、独自のコンポーネントによって保護されていることが宣言されている SOAP ヘッダーを表すキーを含んでいます。

タスクの結果

JAX-WS Web サービス・クライアントが、暗黙の SOAP ヘッダーを送信するよう構成されました。

以下のプログラミング例では、JAX-WS Web サービスの要求および応答のコンテキスト内で、2 つの要求 SOAP ヘッダーを設定し、1 つの応答 SOAP ヘッダーを取得する方法を示します。
1  //Create the hashmaps for the outbound soap headers
2  Map<QName, List<String>> outboundHeaders=new HashMap<QName, List<String>>(); 
3
4  //Add "AtmUuid1" and "AtmUuid2" to the outbound map
5  List<String> list1 = new ArrayList<String>();
6  list1.add("<AtmUuid1 xmlns=¥"com.rotbank.security¥"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
7  List<String> list2 = new ArrayList<String>();
8  list2.add("<AtmUuid2 xmlns=¥"com.rotbank.security¥"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid2>"
9  outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid1"), list1);
10 outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid2"), list2);
11 // Set the outbound map on the request context
12 dispatch.getRequestContext().put("jaxws.binding.soap.headers.outbound");
13 // Invoke the remote operation
14 dispatch.invoke(parm1);
15 // Get the inbound header map from the response context
16 Map<QName,List<String>> inboundMap = dispatch.getResponseContext().get("jaxws.binding.soap.headers.outbound");
17 List<String> serverUuidList = inboundMap.get(new QName("com.rotbank.security","ServerUuid"));
18 String text = serverUiidList.get(0);
19 //Note: text now equals a XML object that contains a SOAP header:
21//"<y:ServerUuid xmlns:y=¥"com.rotbank.security¥"><:uuid>ROTB-0A03519322FSA01
22  </y:uuid></y:ServerUuid.");

行 2 では、アウトバウンド SOAP ヘッダー・マップを作成します。

行 5 から 10 まででは、AtmUuid1 および AtmUuid2 ヘッダー・エレメントがアウトバウンド・マップに追加されます。

行 12 では、アウトバウンド・マップが要求コンテキストに設定されます。これにより、操作が呼び出されたときに AtmUuid1 ヘッダーおよび AtmUuid2 ヘッダーが要求メッセージに追加されるようになります。

行 14 では、リモート操作を呼び出します。

行 15 では、アウトバウンド・ヘッダー・マップを取得します。

行 17 から 18 まででは、応答マップから ServerUuid ヘッダーを取得します。 このマップは、応答メッセージから SOAP ヘッダーにアクセスします。


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



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