42.4. 使用 JMS 消息属性

摘要

Apache CXF JMS 传输具有一个上下文机制,可用于检查 JMS 消息的属性。上下文机制也可用于设置 JMS 消息的属性。

42.4.1. 检查 JMS 消息标头

摘要

使用者和服务使用不同的上下文机制来访问 JMS 消息标头属性。但是,这两种机制都将标头属性作为 org.apache.cxf.transports.jms.context.JMSMessageHeadersType 对象返回。

在服务中获取 JMS 消息标头

要从 WebServiceContext 对象获取 JMS 消息标头属性,请执行以下操作:

  1. 获取 “获取上下文”一节 中描述的上下文。
  2. 使用消息上下文的 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 消息标头,请执行以下操作:

  1. 获取响应上下文,如 “获取上下文”一节 所述。
  2. 使用上下文的 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 消息标头。