第 57 章 JacksonXML
Jackson XML 是一个数据格式,它使用带有 XMLMapper 扩展的 Jackson 库来 将 XML 有效负载解除 Java 对象,或将 Java 对象嵌套到 XML 有效负载中。注意:如果您熟悉 Jackson,这种 XML 数据格式的行为方式与其 JSON 计数器部分相同,因此可将其用于 JSON 序列化/反序列化/反序列化的类。
此扩展也模拟 JAXB 的"代码先"方法。
这个数据格式依赖于 Woodstox (特别是印刷等功能),这是一个快速、高效的 XML 处理器。
from("activemq:My.Queue"). unmarshal().jacksonxml(). to("mqseries:Another.Queue");
57.1. JacksonXML 选项
JacksonXML 数据格式支持 15 个选项,如下所示。
Name | 默认 | Java 类型 | 描述 |
---|---|---|---|
xmlMapper |
| 查找并使用给定 ID 的现有 XmlMapper。 | |
prettyPrint | false |
| 启用大量打印输出。默认为 false。 |
unmarshalType |
| unmarshalling 时要使用的 java 类型的类名称。 | |
jsonView |
| 当 marshalling a POJO to JSON 时,您可能想要从 JSON 输出中排除某些字段。通过 Jackson,您可以使用 JSON 视图来达到此目的。此选项用于引用具有 JsonView 注解的类。 | |
Include |
| 如果您想将 pojo to JSON 放入 JSON,则 pojo 含有一些带有 null 值的字段。您想跳过这些空值,您可以将这个选项设置为 NON_NULL。 | |
allowJmsType |
| 用于 JMS 用户,允许 JMS spec 中的 JMSType 标头指定用于 unmarshal 的 FQN 类名称。 | |
collectionType |
| 指的是要在注册表中查找的自定义集合类型。这个选项很少被使用,但允许使用与 java.util.Collection 不同的集合类型作为默认值。 | |
useList |
| 要联合到映射列表或 Pojo 列表。 | |
enableJaxbAnnotationModule |
| 使用 jackson 时是否启用 JAXB 注解模块。启用之后,Jackson 可以使用 JAXB 注释。 | |
moduleClassNames |
| 要使用自定义 Jackson 模块 com.fasterxml.jackson.databind.Module 指定为带有 FQN 类名称的 String。可以使用逗号分隔多个类。 | |
moduleRefs |
| 使用由 Camel registry 引用的自定义 Jackson 模块。可以使用逗号分隔多个模块。 | |
enableFeatures |
| 在 Jackson com.fasterxml.jackson.databind.ObjectMapper 上启用的功能集。特性应该是一个名称,与来自 com.fasterxml.jackson.databind.SerializationFeature、com.fasterxml.jackson.jackson.databind.DeserializationFeature 或 com.fasterxml.jackson.databind.SerializationFeature 多功能可以分开。 | |
disableFeatures |
| 在 Jackson com.fasterxml.jackson.databind.ObjectMapper 上禁用功能集。特性应该是一个名称,与来自 com.fasterxml.jackson.databind.SerializationFeature、com.fasterxml.jackson.jackson.databind.DeserializationFeature 或 com.fasterxml.jackson.databind.SerializationFeature 多功能可以分开。 | |
allowUnmarshallType |
| 如果启用,则 Jackson 可以在 unmarshalling 中尝试使用 CamelJacksonUnmarshalType 标头。只有在需要使用时,才应启用它。 | |
contentTypeHeader |
| 数据格式是否应该使用数据格式的类型设置 Content-Type 标头。例如:用于数据格式到 XML 的 application/xml,或数据格式到 JSON 的 application/json。 |
57.1.1. 在 Spring DSL 中使用 Jackson XML
在 Spring DSL 中使用 Data Format 时,您需要首先声明数据格式。这在 DataFormats XML 标签中进行。
<dataFormats> <!-- here we define a Xml data format with the id jack and that it should use the TestPojo as the class type when doing unmarshal. The unmarshalType is optional, if not provided Camel will use a Map as the type --> <jacksonxml id="jack" unmarshalType="org.apache.camel.component.jacksonxml.TestPojo"/> </dataFormats>
然后您可以在路由中引用这个 id:
<route> <from uri="direct:back"/> <unmarshal><custom ref="jack"/></unmarshal> <to uri="mock:reverse"/> </route>
57.1.2. 从marshalling marshalling cluding cluding
当 marshalling a POJO to XML 时,您可能想要从 XML 输出中排除某些字段。通过 Jackson,您可以使用 JSON 视图 来达到此目的。首先创建一个或多个标记类。
使用标记类和 @JsonView
注释,以包含/exclude 某些字段。该注释也可以用于 getter。
最后,使用 Camel JacksonXMLDataFormat
将上述 POJO 减去到 XML。
请注意,生成的 XML 中缺少 weight 字段:
<pojo age="30" weight="70"/>