JAX-WS を使用したトランスポート・ヘッダーの取得
Java™ API for XML-Based Web Services (JAX-WS) Web サービス・クライアントでトランスポート・ヘッダーから値を取得できます。HTTP を使用する要求の場合、トランスポート・ヘッダーは、HTTP 応答メッセージ で検出される HTTP ヘッダーから取得されます。Java Message Service (JMS) を使用する要求の場合、トランスポート・ヘッダーは、JMS 応答メッセージ で検出される JMS メッセージ・プロパティーから取得されます。
始める前に
トランスポート・ヘッダーの取得は、Web サービス・クライアントでのみサポートされ、HTTP および JMS トランスポートについてサポートされます。 Web サービス・クライアントは、JAX-WS API を、ゲートウェイ機能などの中間レイヤーを経由せずに直接呼び出す必要があります。
このタスクについて
JAX-WS プログラミング・モデルを使用する場合、クライアントは BindingProvider の RequestContext オブジェクトでプロパティーを設定して、トランスポート・ヘッダーから値を取得する必要があります。 このプロパティーを設定すると、関連プロパティーが null に設定されるか、 またはその BindingProvider オブジェクトが破棄されるまで、BindingProvider への後続のメソッド呼び出しに対する応答から値が読み取られます。
インバウンド応答でトランスポート・ヘッダーの値を取得するには、以下のようにクライアント・コードを変更します。
手順
タスクの結果
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”);
}
}