5.6. メッセージトランスレーター

概要

図5.8「Message Translator パターン」 で示されている Message Translatorパターンは、メッセージの内容を変更し、異なる形式に変換するコンポーネントを記述します。Apache Camel の Bean インテグレーション機能を使用して、メッセージの変換を実行できます。

図5.8 Message Translator パターン

Message Translator パターン

Bean インテグレーション

登録された Bean でメソッドを呼び出し可能にする Bean インテグレーションを使用して、メッセージを変換できます。たとえば、ID が myTransformerBean の Bean でメソッド myMethodName() を呼び出すには、以下を実行します。

from("activemq:SomeQueue")
  .beanRef("myTransformerBean", "myMethodName")
  .to("mqseries:AnotherQueue");

myTransformerBean Bean は Spring XML ファイルまたは JNDI で定義されます。beanRef() で method name パラメーターを省略すると、Bean インテグレーションはメッセージエクスチェンジを確認して、呼び出すメソッド名を推測しようとします。

また、独自の明示的なプロセッサー Processor を追加して、以下のように変換を実行することもできます。

from("direct:start").process(new Processor() {
    public void process(Exchange exchange) {
        Message in = exchange.getIn();
        in.setBody(in.getBody(String.class) + " World!");
    }
}).to("mock:result");

または、DSL を使用して以下のように変換を明示的に設定できます。

from("direct:start").setBody(body().append(" World!")).to("mock:result");

また、テンプレート を使用して、ある宛先からのメッセージを消費し、Velocity や XQuery などのメッセージに変換してから、別の宛先に送信することもできます。InOnly 交換パターン (一方向メッセージング ) を使用する例は次のとおりです。

from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm").
  to("activemq:Another.Queue");

InOut (request-reply) セマンティクスを使用して、テンプレート生成の応答で ActiveMQ の My.Queue キューでリクエストを処理する場合、以下のようなルートを使用して応答を JMSReplyTo 宛先に送り返すことができます。

from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm");