第 59 章 JacksonXML
jackson XML 是一个数据格式,它使用带有 XMLMapper 扩展的 Jackson 库来 将 XML 有效负载分离到 Java 对象或将 marshal Java 对象合并到 XML 有效负载中。注意:如果您熟悉 Jackson,则此 XML 数据格式的行为方式与其 JSON 对应部分相同,因此可用于注解 JSON 序列化/反序列化的类。
此扩展还模拟 JAXB 的"代码先行"方法。
这个数据格式依赖于 Woodstox (特别是对于用户友善打印等功能),它是一个快速高效的 XML 处理器。
from("activemq:My.Queue"). unmarshal().jacksonxml(). to("mqseries:Another.Queue");
59.1. JacksonXML 选项
JacksonXML 数据格式支持 15 个选项,如下所列。
名称 | 默认 | Java 类型 | 描述 |
---|---|---|---|
xmlMapper |
| 查找并使用具有给定 ID 的现有 XmlMapper。 | |
prettyPrint | false |
| 支持格式良好的用户打印输出:默认为 false。 |
unmarshalType |
| 在 unmarshalling 时使用的 java 类型的类名称。 | |
jsonView |
| 将 POJO 打包到 JSON 时,您可能希望从 JSON 输出中排除某些字段。借助 Jackson,您可以使用 JSON 视图来完成此操作。此选项是引用具有 JsonView 注释的类。 | |
Include |
| 如果您想将 pojo 链接到 JSON,而 pojo 则有一些字段具有 null 值。您想要跳过这些 null 值,您可以将这个选项设置为 NON_NULL。 | |
allowJmsType |
| 用于 JMS 用户,以允许 JMS spec 中的 JMSType 标头指定用于 unmarshal 的 FQN 类名称。 | |
collectionType |
| 指的是要在 registry 中使用的自定义集合类型。这个选项应该很少被使用,但允许使用与 java.util.Collection 不同的集合类型作为默认值。 | |
useList |
| 要取消组合到映射列表或 Pojo 的列表,请执行以下操作: | |
enableJaxbAnnotationModule |
| 使用 jackson 时是否启用 JAXB 注释模块。启用后,Jackson 可以使用 JAXB 注释。 | |
moduleClassNames |
| 使用自定义 Jackson 模块 com.fasterxml.jackson.databind.Module,指定为带有 FQN 类名称的 String。可以使用逗号分隔多个类。 | |
moduleRefs |
| 使用 Camel 注册表中提到的自定义 Jackson 模块。可以使用逗号分隔多个模块。 | |
enableFeatures |
| 在 Jackson com.fasterxml.jackson.databind.ObjectMapper 上启用的功能集合。这个功能应该是与 com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, 或 com.fasterxml.jackson.databind.MapperFeature 的多个功能匹配的名称。 | |
disableFeatures |
| Jackson com.fasterxml.jackson.databind.ObjectMapper 上禁用的功能集合。这个功能应该是与 com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, 或 com.fasterxml.jackson.databind.MapperFeature 的多个功能匹配的名称。 | |
allowUnmarshallType |
| 如果启用,则 Jackson 允许在 unmarshalling 期间尝试使用 CamelJacksonUnmarshalType 标头。这只在需要使用时才启用。 | |
contentTypeHeader |
| 数据格式是否应使用数据格式的类型设置 Content-Type 标头。例如,用于数据格式的 application/xml 示例到 XML,或者用于数据格式的应用程序/json 到 JSON。 |
59.1.1. 在 Spring DSL 中使用 Jackson XML
在 Spring DSL 中使用数据格式时,您需要首先声明数据格式。这在 DataFormats XML tag 中完成。
<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>
59.1.2. 将 POJO 字段排除在 marshalling 中
当将 POJO 打包到 XML 时,您可能想从 XML 输出中排除某些字段。借助 Jackson,您可以使用 JSON 视图 来完成此操作。首先创建一个或多个标记类。
将标记类与 @JsonView
注释一起使用,以包含/排除某些字段。该注释也适用于 getters。
最后,使用 Camel JacksonXMLDataFormat
将上述 POJO 结合到 XML。
请注意,生成的 XML 中缺少 weight 字段:
<pojo age="30" weight="70"/>