2.6.2. marshalling 和 Unmarshalling
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");
from("SourceURL").unmarshal().serialization()
.<FurtherProcessing>.to("TargetURL");
或者,在 Spring XML 中:
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");
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 中:
XMLBeans 复制链接链接已复制到粘贴板!
提供 XML 模式类型和 Java 类型之间的备选映射(请参阅 http://xmlbeans.apache.org/)。对于 XMLBeans,取消marshalling 将 XML 数据类型转换为 Java 对象并汇总 Java 对象转换为 XML 数据类型。例如,要使用 XMLBeans 将 XML 数据发封至 Java 对象,您可以使用类似如下的代码:
from("SourceURL").unmarshal().xmlBeans() .<FurtherProcessing>.to("TargetURL");
from("SourceURL").unmarshal().xmlBeans()
.<FurtherProcessing>.to("TargetURL");
或者,在 Spring XML 中:
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");
from("SourceURL").unmarshal().xstream()
.<FurtherProcessing>.to("TargetURL");
Spring XML 当前不支持 XStream 数据格式。