169.5. JMS と Camel 間のメッセージマッピング
Camel は javax.jms.Message
と org.apache.camel.Message
の間でメッセージを自動的にマップします。
JMS メッセージを送信するとき、Camel はメッセージ本文を次の JMS メッセージタイプに変換します。
ボディタイプ | JMS Message | Comment |
---|---|---|
|
|
|
|
|
DOM は |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
JMS メッセージを受信すると、Camel は JMS メッセージを次のボディタイプに変換します。
JMS Message | ボディタイプ |
---|---|
|
|
|
|
|
|
|
|
169.5.1. JMS メッセージの自動マッピングの無効化
mapJmsMessage
オプションを使用して、上記の自動マッピングを無効にすることができます。無効にすると、Camel は受信した JMS メッセージをマップしようとせず、ペイロードとして直接使用します。これにより、マッピングのオーバーヘッドを回避し、Camel に JMS メッセージを通過させることができます。たとえば、クラスパスに ない クラスを使用して javax.jms.ObjectMessage
JMS メッセージをルーティングすることもできます。
169.5.2. カスタム MessageConverter の使用
messageConverter
オプションを使用して、Spring org.springframework.jms.support.converter.MessageConverter
クラスで自分でマッピングを行うことができます。
たとえば、以下のルートでは、メッセージを JMS オーダーキューに送信するときにカスタムメッセージコンバーターを使用します。
from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");
JMS 宛先から消費する場合は、カスタムメッセージコンバーターを使用することもできます。
169.5.3. 選択したマッピング戦略の制御
エンドポイント URL で jmsMessageType
オプションを使用して、すべてのメッセージに対して特定のメッセージタイプを強制することができます。
以下のルートでは、フォルダーからファイルをポーリングし、それらを javax.jms.TextMessage
として送信します。これは、JMS プロデューサーエンドポイントにテキストメッセージの使用を強制したためです。
from("file://inbox/order").to("jms:queue:order?jmsMessageType=Text");
キー CamelJmsMessageType
でヘッダーを設定することにより、各メッセージに使用するメッセージタイプを指定することもできます。以下に例を示します。
from("file://inbox/order").setHeader("CamelJmsMessageType", JmsMessageType.Text).to("jms:queue:order");
可能な値は enum
型クラス org.apache.camel.jms.JmsMessageType
で定義されています。