トランスポート・ヘッダー・プロパティーのベスト・プラクティス

Java™ API for XML-based RPC (JAX-RPC) クライアント・スタブ、Call インスタンス、または Java API for XML-Based Web services (JAX-WS) BindingProvider の RequestContext インスタンスで、REQUEST_TRANSPORT_PROPERTIES プロパティーおよび RESPONSE_TRANSPORT_PROPERTIES プロパティーを設定すると、Web サービス・クライアントでの トランスポート・ヘッダーの送信または取得が可能になります。

ベスト・プラクティス ベスト・プラクティス: 以下のベスト・プラクティスは、Web サービス・クライアントが トランスポート・ヘッダーを送信または取得できるようにするために使用します。bprac

REQUEST_TRANSPORT_PROPERTIES のベスト・プラクティス

HTTP Cookie ヘッダーおよび Cookie2 ヘッダーなど、 一部のトランスポート・ヘッダーには、 複数の組み込み値が含まれています。複数の値が含まれるヘッダーの場合、 ヘッダー値は以下の方法で書き込む必要があります。
  • ヘッダーに組み込まれる個々の名前と値のペアは、セミコロン (;) で区切ります。
  • 個々の名前 とその値は、等号 (=) で結びます。
ヘッダー値を書き込む方法の例を以下に示します。
name1=value1;name2=value2;name3=value3
ユーザーのマップに含まれる値は、 発信要求にそのマップのヘッダー ID と一致するヘッダー ID が既に含まれている場合、 まず構文解析されてからその発信要求に追加されます。複数の組み込み値が含まれる特定のトランスポート・ヘッダーの場合、マップのヘッダー値は、個々の name=value コンポーネントに解析されます。コンポーネントの区切りにはセミコロン (;) を使用して、 name1=value1;name2=value2 のようにします。name=value はそれぞれ発信ヘッダーに追加されますが、 以下の場合はその限りではありません。
  • 発信要求ヘッダーに名前 値が含まれている場合。

    この場合には、マップからの name=value は暗黙のうちに無視されるため、クライアントが、サーバーまたは Web サービス・エンジンが既に発信要求ヘッダーで設定した名前 値の値を上書きしたり変更したりすることができなくなります。

  • ユーザーのヘッダー値に複数の名前 値が含まれている場合。

    ユーザーのヘッダー値に複数の名前 値が含まれていると、最初に現れる名前 値が使用され、 それ以外のものは暗黙のうちに無視されます。例えば、ユーザーのヘッダー値に name1=value1;name2=value2;name1=value3 が含まれている場合、 name1 が 2 回現れるので、最初の値 name1=value1 が使用されます。もう 1 つの値 name1=value3 は暗黙のうちに無視されます。

RESPONSE_TRANSPORT_PROPERTIES のベスト・プラクティス

マップ・キーのみが使用され、マップ値は無視されます。値はトランスポート・ヘッダーを取得することによってこのマップに取り込まれますが、これは、着信する応答メッセージからのマップ・キーに相当します。マップが空の場合、すべてのトランスポート・ヘッダーとそれに関連した値が着信応答メッセージから取得されます。

特別な考慮事項に基づいて処理される HTTP ヘッダー

以下の HTTP ヘッダーは、 HTTP の応答および要求を送信したり取得したりする際に、特別に考慮されるものです。

これらのヘッダーの値は、さまざまな方法で設定できます。 例えば、一部のヘッダー値はデプロイメント記述子やバインディング・ファイルの設定に基づいて送信されます。 このような場合、REQUEST_TRANSPORT_PROPERTIES によって設定された値が、 それ以外の方法で設定された値をオーバーライドします。

表 1. HTTP 要求と応答ヘッダー値. HTTP の応答および要求を送信したり取得したりする際に、HTTP ヘッダーに指定する値です。
ヘッダー 要求の送信 応答の取得
Transfer-encoding
  • transfer-encoding ヘッダーは、HTTP 1.0 では無視されます。
  • HTTP 1.1 を使用している場合、transfer-encoding ヘッダーは、 値が chunked であれば chunked に設定されます。
特別な処理はありません。
Connection
  • connection ヘッダーは、HTTP 1.0 では無視されます。
  • HTTP 1.1 の場合は以下の値が設定されます。
    • 値が「close」に設定されていると、connection ヘッダーは「close」に設定されます。
    • 値が「keep-alive」に設定されていると、connection ヘッダーは「keep-alive」に設定されます。
    • それ以外の値設定はすべて無視されます。
特別な処理はありません。
Expect
  • expect ヘッダーは、HTTP 1.0 では無視されます。
  • HTTP 1.1 の場合は以下の値が設定されます。
    • 値が「100-continue」に設定されていると、connection ヘッダーは「100-continue」に設定されます。
    • それ以外の値設定はすべて無視されます。
特別な処理はありません。
ホスト 無視 特別な処理はありません。
Content-type 無視 特別な処理はありません。
SOAPAction 無視 特別な処理はありません。
Content-length 無視 特別な処理はありません。
Cookie

以下はストリング定数です。 com.ibm.websphere.webservices.Constants.HTTP_HEADER_COOKIE

この構造が正しい場合は、ヘッダー上で値が送信されます。 ヘッダー値フォーマットとマップ値については、この情報を参照してください。 特別な処理はありません。
Cookie2

以下はストリング定数です。 com.ibm.websphere.webservices.Constants.HTTP_HEADER_COOKIE2

「Cookie」項目の情報を参照してください。 特別な処理はありません。
Set-cookie

以下はストリング定数です。 com.ibm.websphere.webservices.Constants.HTTP_HEADER_SET_COOKIE

特別な処理はありません。 プロパティー MAINTAIN_SESSION を true に設定すると、 値全体は SessionContext.CONTEXT_PROPERTY に保存され、 Cookie ヘッダーのそれ以降の要求上で送信されます。詳しくは、 この表の Cookie 項目を参照してください。
Set-cookie2

以下はストリング定数です。 com.ibm.websphere.webservices.Constants.HTTP_HEADER_SET_COOKIE2

特別な処理はありません。 プロパティー MAINTAIN_SESSION を true に設定すると、 値全体は SessionContext.CONTEXT_PROPERTY に保存され、 Cookie ヘッダーのそれ以降の要求上で送信されます。詳しくは、 この表の Cookie 項目を参照してください。

クライアント・コードの例

以下の例は、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 and receive transport headers.
    public void invokeService() {

        // Set up the Map that will contain the request headers.
        Map<String, Object>requestHeaders = new HashMap<String, Object>();
        requestHeaders.put(“Cookie”, “ClientAuthenticationToken=FFEEBBCC”);
        requestHeaders.put(“MyHeaderFlag”, 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);

        // Set up the Map to retrieve transport headers from the response message.
        Map<String, Object>responseHeaders = new HashMap<String, Object>();
        responseHeaders.put(“Set-Cookie”, null);
        responseHeaders.put(“MyHeaderFlag, null);

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

        // Retrieve the headers from the response.
        String cookieValue = responseHeaders.get(“Set-Cookie”);
        String headerFlag = responseHeaders.get(“MyHeaderFlag”);
    }
}

トピックのタイプを示すアイコン 参照トピック



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