トランスポート・ヘッダー・プロパティーのベスト・プラクティス
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 サービス・クライアントでの トランスポート・ヘッダーの送信または取得が可能になります。

REQUEST_TRANSPORT_PROPERTIES のベスト・プラクティス
- ヘッダーに組み込まれる個々の名前と値のペアは、セミコロン (;) で区切ります。
- 個々の名前 とその値は、等号 (=) で結びます。
name1=value1;name2=value2;name3=value3
- 発信要求ヘッダーに名前 値が含まれている場合。
この場合には、マップからの 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 によって設定された値が、 それ以外の方法で設定された値をオーバーライドします。
ヘッダー | 要求の送信 | 応答の取得 |
---|---|---|
Transfer-encoding |
|
特別な処理はありません。 |
Connection |
|
特別な処理はありません。 |
Expect |
|
特別な処理はありません。 |
ホスト | 無視 | 特別な処理はありません。 |
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 項目を参照してください。 |
クライアント・コードの例
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”);
}
}