Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheCamel数据格式与类型转换器_Java_Apache Camel_Integration - Fatal编程技术网

Java ApacheCamel数据格式与类型转换器

Java ApacheCamel数据格式与类型转换器,java,apache-camel,integration,Java,Apache Camel,Integration,我通读了《骆驼》这本书,但无法真正理解如何区分这两者,它们看起来是一样的,都试图将一种数据类型转换为另一种。任何人都可以进一步详细说明在哪种情况下我应该使用特定的一个而不是另一个?这两者有什么区别吗 数据格式 伪示例: from("file://riders/inbox") .marshal().csv() .to("activemq:queue:inbox"); from("file://riders/inbox") .convertBodyTo(String.class) .to("ac

我通读了《骆驼》这本书,但无法真正理解如何区分这两者,它们看起来是一样的,都试图将一种数据类型转换为另一种。任何人都可以进一步详细说明在哪种情况下我应该使用特定的一个而不是另一个?这两者有什么区别吗

数据格式

伪示例:

from("file://riders/inbox")
.marshal().csv()
.to("activemq:queue:inbox");
from("file://riders/inbox")
.convertBodyTo(String.class)
.to("activemq:queue:inbox");
类型转换器

伪示例:

from("file://riders/inbox")
.marshal().csv()
.to("activemq:queue:inbox");
from("file://riders/inbox")
.convertBodyTo(String.class)
.to("activemq:queue:inbox");

Camel以可插拔的方式支持不同的数据格式。这意味着Camel可以对给定格式的消息进行封送或解封。 Camel本机支持Avro、JSON、protobuf、JAXB、XmlBeans、XStream、JiBX、SOAP等

Camel知道端点的预期格式和类型,因为此Camel查找类型转换器,它可以将消息从一种类型转换为另一种类型。您甚至可以像POJO类一样使用自己的类型转换器

在下面的示例
.convertBodyTO
中,我们还可以通过设置charset参数来更改流的编码

范例-

from("file://riders/inbox")
.convertBodyTo(String.class,"UTF-8")
.to("activemq:queue:inbox");
.marshall().csv()
将其转换为csv字符串格式


当您必须将消息转换为特定的数据类型(如JSON、YAML、JAXB)时,可以使用Dataformat,但不能使用Dataformat将消息转换为用户定义的数据类型。

如果要将类型转换为任何其他类型,请使用类型转换器。例如,可以使用类型转换器将Cat类转换为Dog类

元帅/解封官来自学校。基本上,您可以将内存中的任何数据结构映射到字节流(例如,可能是将其保存在磁盘中)。ApacheCamel也反映了同样的情况(尽管他们已经将其扩展到一些常用的格式,如XML、HL7等)。这些也是字符串(大部分)或类型,可以很容易地表示为字节流(例如protobuf),可以很容易地序列化

在ApacheCamel中,如果您注意到,如果您使用封送/解组,那么它不是通用的。输入或输出类型是固定的-意味着您无法从类型转换为任何类型。但类型转换器并非如此-您可以将类型转换为任何类型(使用默认类型转换器或必须提供实现)

您可以将封送/解组视为类型转换的一种特定情况,其中类型是固定的(通常只有驼峰人会提供实现)。正如您在示例中所看到的,
marshal().csv()
是Camel DSL的一部分

但如果您使用类型转换器,您可以自由添加自己的逻辑。这是通用的