Menu Close
42.4. JMS メッセージプロパティーの操作
概要
Apache CXF JMS トランスポートには、JMS メッセージのプロパティーを検査するために使用できるコンテキストメカニズムがあります。コンテキストメカニズムを使用して JMS メッセージのプロパティーを設定することもできます。
42.4.1. JMS メッセージヘッダーの検査
概要
コンシューマーとサービスは、異なるコンテキストメカニズムを使用して JMS メッセージヘッダーのプロパティーにアクセスします。ただし、両方のメカニズムはヘッダープロパティーを org.apache.cxf.transports.jms.context.JMSMessageHeadersType
オブジェクトとして返します。
サービスでの JMS メッセージヘッダーの取得
WebServiceContext
オブジェクトから JMS メッセージヘッダーのプロパティーを取得するには、以下を行います。
- 「コンテキストの取得」の説明に従ってコンテキストを取得します。
-
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 メッセージヘッダーを取得するには、以下を行います。
- 「コンテキストの取得」の説明に従って、レスポンスコンテキストを取得します。
-
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 メッセージヘッダーを取得する。