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) {
// ...
}
}
我想我很困惑在何时/何时使用您自己的Type Converter,何时使用.transform(myTransformer)
处理器,或何时使用自定义DataFormat。提前谢谢!
答案 0 :(得分:10)
差异很微妙,尽管它们都用于不同的事情。你应该使用:
答案 1 :(得分:2)
只是添加杰克上面所说的话。这一切都取决于。
您不需要使用任何Camel API来执行此操作。在某些情况下,您只需要将消息有效负载转换一次或几次。为此你可以使用普通的POJO并从Camel路线等调用它
例如,POJO中将String转换为MyOrder实例的方法。
public MyOrder doSomething(String data) {
...
return ...
}
然后在路径
中的消息转换器中使用方法调用.transform().method(MyBusinessClass.class, "doSomething")
虽然使用任何Camel方式进行消息转换,但是Jake回答,允许您将此无缝集成到Camel中,并将其用作一等公民,因为它是从Camel本身开箱即用的。并允许您在其他路由和Camel应用程序中重用它。
实现org.apache.camel.Expression以转换消息有效负载虽然不经常使用。杰克说,有更好的方法。或者使用如上所示的POJO。虽然上面的POJO最终被评估为org.apache.camel.Expression,因此你可以实现一次并自己使用它。
如果你有一本Camel in Action书的副本,那么第3章就是用Camel转换数据。