2013-01-24 15 views
6

Apache Camelは、Transform EIP、カスタムDataFormatsのコンセプト、カスタムタイプコンバーターの許容量など、データ変換を実行するいくつかの方法を提供しています。どのCamel構造が変形に適していますか?

私は、キャメルルートの内部から非常に複雑な変換を行う必要がある状況があります。私は自分の形コンバータ、私自身のデータフォーマットを実装すること、または私はorg.apache.camel.Expressionを実装し、そこにすべての変換のものを置く必要がありますする必要があります

public class MyTransformer implements Expression { 
    @Override 
    public <T> T evaluate(Exchange arg0, Class<T> arg1) { 
     // ... 
    } 
} 

私は/それはあなた自身を使用することが適切だとき場所について混乱していると思いますタイプコンバータ、.transform(myTransformer)プロセッサを使用するタイミング、またはカスタムDataFormatを使用するタイミング。前もって感謝します!

答えて

9

違いは微妙ですが、それぞれ異なるものに使用されています。 「ビジネスペイロード」をある形状から別の形状に変換するときは、

  • transformerを使用する必要があります。たとえば、DAOから取得した値オブジェクトを、Webサービスを呼び出すために使用するJAXB注釈付きオブジェクトに変換する場合です。
  • data formatオブジェクトのタイプなどの高レベル表現を低レベル表現(ワイヤで送信するもの)にマーシャリングする場合は、データ形式には、シリアル化、Googleプロトコルバッファ、JSON、JAXBなどがあります。メッセージの表現方法に変更を加える場合は、
  • type converterを使用します。例えば。文字列とバイト配列またはInputStreamは同じ文字を読み込んでいるので、これらのうちの2つの間で変換するコンバーターを書き込むかもしれません(実際には内蔵されています)。
2

Jakeが言ったことをちょうど追加してください。それはすべて依存している。

キャメラAPIを使用する必要はありません。メッセージペイロードを1回または数回変換する必要がある場合があります。そしてそのために普通のPOJOを使用してCamelルートなどから呼び出すことができます

たとえば、StringをMyOrderインスタンスに変換するPOJOのメソッドです。

public MyOrder doSomething(String data) { 
    ... 
    return ... 
} 

そしてジェイクは答えとしてメッセージ変換用のラクダのいずれかの方法を使用しますが、あなたはキャメルにこのシームレスに統合することができます

.transform().method(MyBusinessClass.class, "doSomething") 

ルートでメッセージトランスにメソッド呼び出しを使用し、それはキャメル自身からの箱から提供されたので、ファーストクラスの市民としてそれを使用してください。それを他のルートやCamelアプリケーションで再利用することができます。

メッセージペイロードを変換するためのorg.apache.camel.Expressionの実装はそれほど頻繁には使用されませんが、ジェイクが言うように、より良い方法があります。または上記のようにPOJOを使用してください。上記のPOJOは最終的にorg.apache.camel.Expressionとして評価されます。したがって、なぜあなたは一度実装して自分自身も使用できます。

Camel in Actionの書籍をお持ちの場合、第3章ではすべてCamelでデータを変換しています。

関連する問題