2.6.2. marshalling 和 Unmarshalling

Java DSL 命令

您可以使用以下命令在低级和高级别消息格式转换:

  • marshal() abrt-abrt 将高级别数据格式转换为低级数据格式。
  • unmarshal() jaxb-abrt 将低级数据格式转换为高级别数据格式。

数据格式

Apache Camel 支持以下数据格式的 marshalling 和 unmarshalling:

  • Java序列化
  • JAXB
  • XMLBeans
  • XStream

Java序列化

允许您将 Java 对象转换为二进制数据的 Blob。对于这个数据格式,取消marshall 会将二进制 blob 转换为 Java 对象,并将 Java 对象转换为二进制 blob。例如,若要从端点 SourceURL 读取序列化 Java 对象,并将其转换为 Java 对象,您可以使用类似如下的规则:

from("SourceURL").unmarshal().serialization()
.<FurtherProcessing>.to("TargetURL");

或者,在 Spring XML 中:

<camelContext id="serialization" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="SourceURL"/>
    <unmarshal>
      <serialization/>
    </unmarshal>
    <to uri="TargetURL"/>
  </route>
</camelContext>

JAXB

提供 XML 模式类型和 Java 类型之间的映射(请参阅 https://jaxb.dev.java.net/)。对于 JAXB,unmarshalling 会将 XML 数据类型转换为 Java 对象,并总结 Java 对象转换为 XML 数据类型。在可以使用 JAXB 数据格式之前,您必须使用 JAXB 编译器编译您的 XML 架构,以在架构中生成代表 XML 数据类型的 Java 类。这称为 绑定模式。绑定模式后,您可以使用类似如下的代码定义将 XML 数据解压缩到 Java 对象的规则:

org.apache.camel.spi.DataFormat jaxb = new org.apache.camel.converter.jaxb.JaxbDataFormat("GeneratedPackageName");

from("SourceURL").unmarshal(jaxb)
.<FurtherProcessing>.to("TargetURL");

其中 generateedPackagename 是 JAXB 编译器生成的 Java 软件包的名称,其中包含代表您的 XML 架构的 Java 类。

或者,在 Spring XML 中:

<camelContext id="jaxb" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="SourceURL"/>
    <unmarshal>
      <jaxb prettyPrint="true" contextPath="GeneratedPackageName"/>
    </unmarshal>
    <to uri="TargetURL"/>
  </route>
</camelContext>

XMLBeans

提供 XML 模式类型和 Java 类型之间的备选映射(请参阅 http://xmlbeans.apache.org/)。对于 XMLBeans,unmarshalling 会将 XML 数据类型转换为 Java 对象,并将 Java 对象转换为 XML 数据类型。例如,要使用 XMLBeans 将 XML 数据解压缩到 Java 对象,您可以使用类似如下的代码:

from("SourceURL").unmarshal().xmlBeans()
.<FurtherProcessing>.to("TargetURL");

或者,在 Spring XML 中:

<camelContext id="xmlBeans" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="SourceURL"/>
    <unmarshal>
      <xmlBeans prettyPrint="true"/>
    </unmarshal>
    <to uri="TargetURL"/>
  </route>
</camelContext>

XStream

提供 XML 类型和 Java 类型之间的另一个映射(请参阅 http://www.xml.com/pub/a/2004/08/18/xstream.html)。XStream 是一个序列化库(如 Java序列化),可让您将任何 Java 对象转换为 XML。对于 XStream,解压缩将 XML 数据类型转换为 Java 对象,并汇总 Java 对象,将 Java 对象转换为 XML 数据类型。

from("SourceURL").unmarshal().xstream()
.<FurtherProcessing>.to("TargetURL");
注意

Spring XML 目前不支持 XStream 数据格式。