使用 JAX-WS 检索传输头
可以使 Java™ API for XML-Based Web Services (JAX-WS) Web Service 客户机从传输头检索值。对于使用 HTTP 的请求,从 HTTP 响应消息中找到的 HTTP 头检索传输头。对于使用 Java 消息服务 (JMS) 的请求,将从 JMS 响应消息上找到的 JMS 消息属性检索传输头。
开始之前
只有 Web Service 客户机支持检索传输头,并且支持通过 HTTP 和 JMS 传输进行检索。Web Service 客户机必须直接调用 JAX-WS API,而不是通过任意层(例如,网关功能)进行调用。
关于此任务
使用 JAX-WS 编程模型时,客户机必须在 BindingProvider 的 RequestContext 对象上设置属性以便从传输头检索值。 设置属性后,将从针对该 BindingProvider 对象的后续方法调用的响应中读取值,直到关联的属性设置为 null 或废弃 BindingProvider 对象为止。
要从入站响应上的传输头检索值,请按照以下所示来修改客户机代码:
过程
结果
您具有可从入局响应消息接收传输头的 JAX-WS Web Service。
示例
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”);
}
}