Java 哪种骆驼构造适合转换?

Java 哪种骆驼构造适合转换?,java,apache-camel,esb,Java,Apache Camel,Esb,ApacheCamel提供了几种执行数据转换的方法:转换EIP的概念、自定义数据格式,以及允许自定义类型转换器 我有一种情况,我需要从骆驼路线内部进行非常复杂的转换。我应该实现我自己的类型转换器、我自己的数据格式,还是应该实现org.apache.camel.Expression并将所有转换内容放在其中: public class MyTransformer implements Expression { @Override public <T> T evaluate

ApacheCamel提供了几种执行数据转换的方法:转换EIP的概念、自定义数据格式,以及允许自定义类型转换器

我有一种情况,我需要从骆驼路线内部进行非常复杂的转换。我应该实现我自己的类型转换器、我自己的数据格式,还是应该实现
org.apache.camel.Expression
并将所有转换内容放在其中:

public class MyTransformer implements Expression {
    @Override
    public <T> T evaluate(Exchange arg0, Class<T> arg1) {
        // ...
    }
}
公共类MyTransformer实现表达式{
@凌驾
公共T评估(交换arg0,类arg1){
// ...
}
}

我想我对在哪里/什么时候使用您自己的类型转换器、什么时候使用
.transform(myTransformer)
处理器或者什么时候使用自定义数据格式感到困惑。提前谢谢

虽然它们都用于不同的事情,但差异是微妙的。你应使用:

  • 当您将“业务负载”从一个形状转换为另一个形状时。例如,当您将从DAO提取的值对象转换为JAXB注释的对象时,您将使用这些对象来调用webservice
  • 当您想要将一个高级表示(例如某种类型的对象)整理成一个较低级别的表示(您可以通过导线发送的东西)时。数据格式包括序列化、Google协议缓冲区、JSON、JAXB等
  • 当您更改访问消息表示形式的方式时。例如,字符串和字节数组或InputStream仍然读取相同的字符,因此您可以在其中写入(尽管实际上有内置的)转换器,在任意两个字符之间进行转换

只是想补充一下杰克上面说的话。这要看情况而定

您不需要使用任何Camel API来实现这一点。在某些情况下,您可能只需要转换消息负载一次或几次。为此,您可以使用普通的POJO,并从驼峰路径等调用它

例如,POJO中将字符串转换为MyOrder实例的方法

public MyOrder doSomething(String data) {
    ...
    return ...
}
然后在路由的消息转换器中使用方法调用

.transform().method(MyBusinessClass.class, "doSomething")
尽管如Jake所回答的,使用任何一种驼峰方式进行消息转换,但它允许您将此无缝集成到驼峰中,并将其作为一级公民使用,因为它是由驼峰自己开箱即用提供的。并允许您在其他路由和Camel应用程序中重复使用

实现org.apache.camel.Expression来转换消息负载虽然不是经常使用。正如杰克所说,还有更好的办法。或者使用如上所示的POJO。尽管上面的POJO最终被评估为org.apache.camel.Expression,因此您可以实现一次并自己使用它

如果您有一本《骆驼行动手册》,那么第三章将介绍如何使用骆驼转换数据