繁体   English   中英

哪种Camel构造适合转换?

[英]Which Camel construct is suited for transforming?

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。 提前致谢!

差异很微妙,尽管它们都用于不同的事物。 你应该使用:

  • 将“业务负载”从一种形状转换为另一种形状时的变压器 例如,当您将从DAO提取的值对象转换为将用于调用Web服务的JAXB带注释的对象时。
  • 当您想要将高级表示(例如某种类型的Object)编组到较低级别的表示中时的数据格式 - 您将通过线路发送的内容。 数据格式包括序列化,Google协议缓冲区,JSON,JAXB等。
  • 当您更改访问消息表示的方式时, 类型转换器 例如,字符串和字节数组或InputStream仍然读取相同的字符,因此您可以编写(尽管实际上有内置的)转换器,它们可以在这两个字符之间进行转换。

只是为了补充杰克上面所说的话。 这完全取决于。

而且您不需要使用任何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转换数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM