搜索

2.6.2. marshalling 和 Unmarshalling

download PDF

Java DSL 命令

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

  • marshal () •- Converts a high-level data format to a low-level data format。
  • unmarshal () •- Converts a low-level data format to a high-level data format。

数据格式

Apache Camel 支持对以下数据格式进行 marshalling 和 unmarshalling:

  • Java 序列化
  • JAXB
  • XMLBeans
  • XStream

Java 序列化

允许您将 Java 对象转换为二进制数据的 blob。对于这种数据格式,将二进制 blob 转换为 Java 对象,并通过 marshalling 将 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 对象,marshalling 可将 Java 对象转换为 XML 数据类型。在使用 JAXB 数据格式前,您必须使用 JAXB 编译器编译 XML 模式,以生成代表架构中 XML 数据类型的 Java 类。这称为 绑定 schema。在绑定了 schema 后,您可以使用类似如下的代码定义将 XML 数据解封到 Java 对象的规则:

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

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

其中生成了 Packagename 是 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,取消marshalling 将 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,unmarshalling 可将 XML 数据类型转换为 Java 对象,marshalling 会将 Java 对象转换为 XML 数据类型。

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.