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. org.apache.cxf.transports.jms.JMSConstants.JMS_SERVER_HEADERS パラメーターと共にメッセージコンテキストの get() メソッドを使用して、メッセージコンテキストからメッセージヘッダーを取得します。

例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. org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_RESPONSE_HEADERS をパラメーターとしてコンテキストの get() メソッドを使用して、応答コンテキストから JMS メッセージヘッダーのプロパティーを取得します。

例42.13「コンシューマー応答ヘッダーからの JMS ヘッダーの取得」 は、コンシューマーの応答コンテキストから JMS メッセージヘッダープロパティーを取得するためのコードを示しています。

例42.13 コンシューマー応答ヘッダーからの 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「コンシューマー応答ヘッダーからの JMS ヘッダーの取得」 のコードは、以下を行います。

プロキシーを BindingProvider にキャストします。

応答コンテキストを取得します。

応答コンテキストから JMS メッセージヘッダーを取得します。