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 サービス・クライアント・アプリケーションからアウトバウンド要求でトランスポート・ヘッダー内の値を送信するには、以下のようにクライアント・コードを変更します。
手順
タスクの結果
JAX-WS Web サービス・クライアントは、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 エンドポイントからの応答トランスポート・ヘッダーの送信は、JAX-WS クライアントからの要求トランスポート・ヘッダーの送信と類似しています。HTTP および JMS トランスポートでサポートされています。
このタスクについて
手順
- トランスポート・ヘッダーを含む java.util.Map オブジェクトを作成します。
- 応答メッセージで送信するトランスポート・ヘッダーごとに、エントリー (キーと値) を Map オブジェクトに追加します。 これは前のクライアントの手順と同様です。
- エンドポイントの呼び出しに関連付けられた MessageContext (javax.xml.ws.handler.MessageContext のインスタンス) を取得します。
- com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES プロパティーを使用して、Map オブジェクトを MessageContext に設定します。
タスクの結果
例
@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;
}
}