Red Hat Training
A Red Hat training course is available for Red Hat Fuse
42.4. 使用 JMS 消息属性
摘要
Apache CXF JMS 传输具有一个上下文机制,可用于检查 JMS 消息的属性。上下文机制也可用于设置 JMS 消息的属性。
42.4.1. 检查 JMS 消息标头
摘要
使用者和服务使用不同的上下文机制来访问 JMS 消息标头属性。但是,这两种机制都将标头属性作为 org.apache.cxf.transports.jms.context.JMSMessageHeadersType 对象返回。
在服务中获取 JMS 消息标头
要从 WebServiceContext 对象获取 JMS 消息标头属性,请执行以下操作:
- 获取 “获取上下文”一节 中描述的上下文。
-
使用消息上下文的
get ()方法和参数 org.apache.cxf.transports.jms.JMSConstants.JMS_SERVER_HEADERS 获取消息标题。
例 42.12 “在服务实现中获取 JMS 消息标头” 显示从服务的消息上下文获取 JMS 消息标头的代码:
例 42.12. 在服务实现中获取 JMS 消息标头
import org.apache.cxf.transport.jms.JMSConstants;
import org.apache.cxf.transports.jms.context.JMSMessageHeadersType;
@WebService(serviceName = "HelloWorldService",
portName = "HelloWorldPort",
endpointInterface = "org.apache.cxf.hello_world_jms.HelloWorldPortType",
targetNamespace = "http://cxf.apache.org/hello_world_jms")
public class GreeterImplTwoWayJMS implements HelloWorldPortType
{
@Resource
protected WebServiceContext wsContext;
...
@WebMethod
public String greetMe(String me)
{
MessageContext mc = wsContext.getMessageContext();
JMSMessageHeadersType headers = (JMSMessageHeadersType) mc.get(JMSConstants.JMS_SERVER_HEADERS);
...
}
...
}在消费者中获取 JMS 消息标头属性
从 JMS 传输成功检索了消息后,您可以使用消费者的响应上下文检查 JMS 标头属性。另外,您可以设置或检查客户端在超时前等待响应的时间,如 “客户端接收超时”一节 所述。 从消费者的响应上下文获取 JMS 消息标头,请执行以下操作:
- 获取响应上下文,如 “获取上下文”一节 所述。
-
使用上下文的
get ()方法和 org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_RESPONSE_HEADERS 获取 JMS 消息标头属性。
例 42.13 “从 Consumer Response 标头获取 JMS 标头” 显示从消费者的响应上下文获取 JMS 消息标头属性的代码。
例 42.13. 从 Consumer Response 标头获取 JMS 标头
import org.apache.cxf.transports.jms.context.*;
// Proxy greeter initialized previously
BindingProvider bp = (BindingProvider)greeter;
Map<String, Object> responseContext = bp.getResponseContext();
JMSMessageHeadersType responseHdr = (JMSMessageHeadersType)
responseContext.get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS);
...
}例 42.13 “从 Consumer Response 标头获取 JMS 标头” 中的代码执行以下操作:
将代理广播到 BindingProvider。
获取响应上下文。
从响应上下文检索 JMS 消息标头。