60.4. 部分 marshalling/unmarshalling
JAXB 2 支持 marshalling 和 unmarshalling XML 树片段。默认情况下,JAXB 在给定类上查找 @XmlRootElement 注释,以便在整个 XML 树中操作。这很有用,但并不总是 - 有时生成的代码没有 @XmlRootElement 注释,有时您需要取消总结树。
在这种情况下,您可以使用部分卸载。要启用此功能,您需要设置 property partClass。Camel 会将此类传递到 JAXB 的 unmarshaler。如果 JaxbConstants.JAXB_PART_CLASS 设置为标题之一,(即使在 DataFormat 上设置了 partClass 属性),DataFormat 上的属性超过了标头中设置的属性。
对于 marshalling,您必须添加 partNamespace 属性和目标命名空间的 QName。上面可以找到的 Spring DSL 示例。
如果 JaxbConstants.JAXB_PART_NAMESPACE 设置为标题之一,(即使在 DataFormat 上设置了 partNamespace 属性),DataFormat 的属性将被超过,并且报头中设置的值。通过 JaxbConstants.JAXB_PART_NAMESPACE 设置 partNamespace 时,您需要指定其值 \{[namespaceUri]}[localPart]
...
.setHeader(JaxbConstants.JAXB_PART_NAMESPACE, simple("{http://www.camel.apache.org/jaxb/example/address/1}address"));
...
...
.setHeader(JaxbConstants.JAXB_PART_NAMESPACE, simple("{http://www.camel.apache.org/jaxb/example/address/1}address"));
...