JAX-WS によるトランスポート・ヘッダーの送信

既存の Java™ API for XML-Based Web Services (JAX-WS) Web サービス・クライアントを有効にすると、トランスポート・ヘッダーを使用して、Web サービス要求とともにアプリケーション定義情報を送信することができます。さらに、トランスポート・ヘッダーを使用して、JAX-WS Web サービス・エンドポイントが Web サービス応答メッセージとともにアプリケーション定義情報を送信できるようにします。

始める前に

トランスポート・ヘッダーを送信できるようにする JAX-WS Web サービス・クライアントが必要になります。

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

このタスクについて

JAX-WS プログラミング・モデルを使用する場合、クライアントは、Web サービス要求メッセージとともにトランスポート・ヘッダー内の値を送信するために、 BindingProvider の RequestContext オブジェクトのプロパティーを設定する必要があります。このプロパティーを設定すると、関連プロパティーが null に設定されるか、または BindingProvider オブジェクトが廃棄されるまで、BindingProvider オブジェクトに対する後続のリモート・メソッド呼び出し のすべての要求内で値が設定されます。

JAX-WS Web サービス・クライアント・アプリケーションからアウトバウンド要求でトランスポート・ヘッダー内の値を送信するには、以下のようにクライアント・コードを変更します。

手順

  1. トランスポート・ヘッダーを含む java.util.Map オブジェクトを作成します。
  2. クライアントが送信するトランスポート・ヘッダーごとに、エントリーを Map オブジェクトに追加します。
    1. トランスポート・ヘッダー ID と正確に一致するストリングを Map エントリー・キーに設定します。 予約済みのヘッダー名 (HTTP の場合は Cookie など) でヘッダー ID を定義できます。 または、ヘッダー ID を MyTransportHeader のようにユーザー定義に することができます。 特定のヘッダー ID は固有の方法で処理されますが、ヘッダー ID 値に関しては、その他のチェックは行われません。 固有の考慮事項がある HTTP ヘッダー ID について詳しくは、トランスポート・ヘッダー・プロパティーのベスト・プラクティスを参照してください。HTTP_HEADER_SET_COOKIE などの共通ヘッダー ID ストリング定数は、com.ibm.websphere.webservices.Constants クラス内にあります。
    2. Map エントリーの値をトランスポート・ヘッダーの値に設定します。 この値のタイプは以下のいずれかのデータ・タイプにすることができます。
      • java.lang.String
      • java.lang.Integer
      • java.lang.Short
      • java.lang.Long
      • java.lang.Float
      • java.lang.Double
      • java.lang.Byte
      • java.lang.Boolean
  3. com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES プロパティーを使用して、Map オブジェクトを BindingProvider の RequestContext に設定します。 REQUEST_TRANSPORT_PROPERTIES プロパティー値を設定すると、発信要求内でヘッダー値を設定する場合に後続の呼び出しでその Map が使用されます。 REQUEST_TRANSPORT_PROPERTIES プロパティー値を null に設定すると、トランスポート・プロパティーは発信要求で送信されません。これらのプロパティーについて詳しくは、トランスポート・ヘッダー・プロパティーの文書を参照してください。
  4. BindingProvider インスタンスに対してリモート・メソッド呼び出しを発行します。 Map のヘッダーおよび関連値は、メソッド呼び出しごとに発信要求に追加されます。 呼び出しが HTTP を使用する場合、 トランスポート・ヘッダーは、HTTP 要求内の HTTP ヘッダーとして送信されます。 呼び出しが JMS を使用する場合、トランスポート・ヘッダーは、 JMS メッセージ・プロパティーとして送信されます。
    Constants.REQUEST_TRANSPORT_PROPERTIES プロパティーが正しく設定されていない場合は、API 使用法エラーが発生し、WebServiceException エラーが出される場合があります。以下の要件が満たされている必要があります。満たされていない場合は、プロセスが失敗します。
    1. BindingProvider の RequestContext で設定されている Constants.REQUEST_TRANSPORT_PROPERTIES プロパティー値は、java.util.Map オブジェクトまたは null にする必要があります。
    2. Map の各キーは java.util.String データ・タイプにする必要があります。
    3. Map の各値は、以下のいずれかのデータ・タイプでなければなりません。
      • java.lang.String
      • java.lang.Integer
      • java.lang.Short
      • java.lang.Long
      • java.lang.Float
      • java.lang.Double
      • java.lang.Byte
      • java.lang.Boolean

タスクの結果

JAX-WS Web サービス・クライアントは、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 send transport headers on the request.
    public void invokeService() {

        // Set up the Map that will contain the request headers.
        Map<String, Object> requestHeaders = new HashMap<String, Object>();
        requestHeaders.put(“MyHeader1”, “This is a string value”);
        requestHeaders.put(“MyHeader2”, new Integer(33));
        requestHeaders.put(“MyHeader3”, new Boolean(true));

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

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

JAX-WS エンドポイントからの応答トランスポート・ヘッダーの送信

始める前に

トランスポート・ヘッダーを送信できるようにする JAX-WS Web サービス・エンドポイント実装クラスが必要になります。

JAX-WS エンドポイントからの応答トランスポート・ヘッダーの送信は、JAX-WS クライアントからの要求トランスポート・ヘッダーの送信と類似しています。HTTP および JMS トランスポートでサポートされています。

このタスクについて

JAX-WS プログラミング・モデルを使用する場合、エンドポイント実装クラスは、Web サービス応答メッセージとともにトランスポート・ヘッダー内の値を送信するために、MessageContext のプロパティーを設定する必要があります。

手順

  1. トランスポート・ヘッダーを含む java.util.Map オブジェクトを作成します。
  2. 応答メッセージで送信するトランスポート・ヘッダーごとに、エントリー (キーと値) を Map オブジェクトに追加します。 これは前のクライアントの手順と同様です。
  3. エンドポイントの呼び出しに関連付けられた MessageContext (javax.xml.ws.handler.MessageContext のインスタンス) を取得します。
  4. com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES プロパティーを使用して、Map オブジェクトを MessageContext に設定します。

タスクの結果

JAX-WS Web サービス・エンドポイント実装クラスは、Web サービス応答メッセージでトランスポート・ヘッダーを送信するように構成されました。

以下は、JAX-WS Web サービス・エンドポイント実装クラスによる応答トランスポート・ヘッダーの送信方法を示す簡単なプログラミングの例です。
@WebService
public class EchoServiceImpl implements EchoServicePortType {

    // Inject an instance of WebServiceContext so we can retrieve
    // the MessageContext for each invocation of this endpoint.
    @Resource
    WebServiceContext ctxt;

    /**
     * Default constructor. 
     */
    public EchoServiceImpl() {
        ....
    }

    public String echoString(String input) {
        String result = “Echo result: “ + input;

        // Retrieve the MessageContext from the injected WebServiceContext.
        MessageContext mc = ctxt.getMessageContext();

        // Send some headers back in the response message.
        Map<String, Object> responseHeaders = new HashMap<String, Object>();
        responseHeaders.put("MyHeader1", "This is a string response value");
        responseHeaders.put("MyHeader2", new Integer(33));
        responseHeaders.put("MyHeader3”, new Boolean(false));

        // Set the response header Map on the MessageContext.
        mc.put(com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES, responseHeaders);

        return result;
    }
}

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



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