JAX-WS を使用したトランスポート・ヘッダーの取得

Java™ API for XML-Based Web Services (JAX-WS) Web サービス・クライアントでトランスポート・ヘッダーから値を取得できます。HTTP を使用する要求の場合、トランスポート・ヘッダーは、HTTP 応答メッセージ で検出される HTTP ヘッダーから取得されます。Java Message Service (JMS) を使用する要求の場合、トランスポート・ヘッダーは、JMS 応答メッセージ で検出される JMS メッセージ・プロパティーから取得されます。

始める前に

トランスポート・ヘッダーを取得するために使用可能にできる JAX-WS Web サービス・クライアントが必要となります。

トランスポート・ヘッダーの取得は、Web サービス・クライアントでのみサポートされ、HTTP および JMS トランスポートについてサポートされます。 Web サービス・クライアントは、JAX-WS API を、ゲートウェイ機能などの中間レイヤーを経由せずに直接呼び出す必要があります。

このタスクについて

JAX-WS プログラミング・モデルを使用する場合、クライアントは BindingProvider の RequestContext オブジェクトでプロパティーを設定して、トランスポート・ヘッダーから値を取得する必要があります。 このプロパティーを設定すると、関連プロパティーが null に設定されるか、 またはその BindingProvider オブジェクトが破棄されるまで、BindingProvider への後続のメソッド呼び出しに対する応答から値が読み取られます。

インバウンド応答でトランスポート・ヘッダーの値を取得するには、以下のようにクライアント・コードを変更します。

手順

  1. 応答メッセージから取得したトランスポート・ヘッダーを保持する java.util.Map オブジェクトを作成します。 応答メッセージからトランスポート・ヘッダーをすべて取得するには、この Map を空のままにしておきます。
  2. (オプション) 受信応答メッセージから取得するヘッダーごとに、エントリーを Map に追加します。
    1. トランスポート・ヘッダー ID と正確に一致するストリングを Map エントリー・キーに設定します。 HTTP の場合の Cookie などのように予約済みヘッダー名でヘッダー ID を指定したり、MyTransportHeader のようにヘッダー ID をユーザー定義したりできます。 特定のヘッダー ID は固有の方法で処理されますが、ヘッダー ID 値を確認するその他のチェックは実行されません。 固有の考慮事項がある HTTP ヘッダー ID について詳しくは、トランスポート・ヘッダー・プロパティーのベスト・プラクティスを参照してください。HTTP_HEADER_SET_COOKIE などの共通ヘッダー ID ストリング定数は、com.ibm.websphere.webservices.Constants クラス内にあります。 Map エントリー値は無視されます。設定する必要はありません。 例えば、空の Map (非ヌルだがキーを含まない値) を使用すると、応答内のすべてのトランスポート・ヘッダーが取得されます。
  3. com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES プロパティーを使用して、Map オブジェクトを BindingProvider の RequestContext に設定します。 Map を設定すると、応答からヘッダーを取得するために後続の呼び出しで RESPONSE_TRANSPORT_PROPERTIES プロパティーが使用されます。 このプロパティーを null に設定した場合は、ヘッダーが応答から取得されません。 これらのプロパティーについて詳しくは、トランスポート・ヘッダー・プロパティーの文書を 参照してください。
  4. BindingProvider インスタンスに対してリモート・メソッド呼び出しを実行します。 指定されたトランスポート・ヘッダーからの値は、応答メッセージから取得され、Map に格納されます。
    プロパティーが正しく設定されていない場合、 API 使用法エラーが発生し、WebServiceException エラーが出される場合があります。以下の要件が満たされている必要があります。満たされていない場合は、プロセスが失敗します。
    • BindingProvider の RequestContext インスタンスで設定されている Constants.RESPONSE_TRANSPORT_PROPERTIES プロパティー値は、null、または java.util.Map のインスタンスにする必要があります。
    • すべての Map キーは java.lang.String データ・タイプである必要があり、キーは非ヌルである必要があります。
    • Map は空の場合 (つまり、エントリーが何も含まれていない場合) があります。この場合は、すべてのトランスポート・ヘッダーが応答メッセージから取得されます。

タスクの結果

JAX-WS Web サービスで、受信応答メッセージからトランスポート・ヘッダーを受信できるようになりました。

以下は、JAX-WS Web サービス・クライアント・アプリケーションによる応答トランスポート・ヘッダーの取得方法を示す簡単なプログラミングの例です。
public class MyApplicationClass {
    // Inject an instance of the service's port-type.
    @WebServiceRef(EchoService.class)
    private EchoPortType port;

    // This method will invoke  the web service operation and retrieve transport headers on the request.
    public void invokeService() {

        // Set up the Map to retrieive our response headers.
        Map<String, Object> responseHeaders = new HashMap<String, Object>;
        responseHeaders.put(“MyHeader1”, null);
        responseHeaders.put(“MyHeader2”, null);
        responseHeaders.put(“MyHeader3”, null);

        // Set the Map as a property on the RequestContext.
        BindingProvider bp = (BindingProvider) port;
        bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES, responseHeaders);

        // Invoke the web services operation.
        String result = port.echoString(“Hello, world!”);

        // Now retrieve our response headers.
        Object header1 = responseHeaders.get(“MyHeader1”);
        Object header2 = responseHeaders.get(“MyHeader2”);
        Object header3 = responseHeaders.get(“MyHeader3”);

    }
}

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



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