7

Apache Camel は、データ変換を実行するいくつかの方法を提供します。Transform EIP の概念、カスタム DataFormats、およびカスタム タイプ コンバーターの許容範囲です。

Camel ルート内から非常に複雑な変換を行う必要がある状況があります。独自の Type Converter、独自の DataFormat を実装する必要がありますか、それともorg.apache.camel.Expressionすべての変換を実装してそこに配置する必要があります。

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

.transform(myTransformer)独自の Type Converter をいつどこで使用するか、いつプロセッサを使用するか、またはいつカスタム DataFormat を使用するかについて、私は混乱していると思います。前もって感謝します!

4

2 に答える 2

13

違いは微妙ですが、それらはすべて異なるものに使用されます。以下を使用する必要があります。

  • 「ビジネスペイロード」をある形状から別の形状に変換するときのトランスフォーマー。たとえば、DAO から取得した値オブジェクトを、Web サービスの呼び出しに使用する JAXB アノテーション付きオブジェクトに変換する場合です。
  • あるタイプのオブジェクトなどの高レベルの表現を低レベルの表現にマーシャリングする場合のデータ形式- ワイヤ経由で送信するもの。データ形式には、シリアル化、Google プロトコル バッファ、JSON、JAXB などがあります。
  • メッセージの表現にアクセスする方法を変更する場合の型コンバーター。たとえば、String とバイト配列または InputStream は引き続き同じ文字を読み取るため、これらのうちの任意の 2 つを変換するコンバーターを (実際には組み込みで) 記述できます。
于 2013-01-25T14:41:21.497 に答える
4

ジェイクが上で言ったことを追加するだけです。それはすべて依存します。

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

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

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

そして、ルートのメッセージトランスフォーマーでメソッド呼び出しを使用します

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

Jakeが答えたように、メッセージ変換にCamelの方法のいずれかを使用していますが、これをシームレスにCamelに統合し、Camel自体からそのまま提供されているため、ファーストクラスの市民として使用できます. そして、それを他のルートや Camel アプリケーションで再利用できます。

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

Camel in Action book のコピーを持っている場合、第 3 章はすべて Camel を使用したデータの変換です。

于 2013-01-27T07:04:04.173 に答える