53.6. Partial marshalling / unmarshalling
JAXB 2 支持 marshalling 和 unmarshalling XML 树片段。默认情况下,JAXB 会查找给定类上的 @XmlRootElement 注释,以在整个 XML 树上运行。有时,生成的代码没有 @XmlRootElement 注释,有时您需要 unmarshall 仅有树的一部分。
在这种情况下,您可以使用部分 unmarshalling。要启用此行为,您需要在 JaxbDataFormat 上设置属性 partClass。Camel 会将此类传递给 JAXB unmarshaller。如果将 JaxbConstants.JAXB_PART_CLASS 设置为其中一个交换标头,则使用其值覆盖 JaxbDataFormat 上的 partClass 属性。
对于 marshalling,您必须使用目标命名空间的 QName 添加 partNamespace 属性。
如果将 JaxbConstants.JAXB_PART_NAMESPACE 设置为其中一个交换标头,则使用其值覆盖 JaxbDataFormat 上的 partNamespace 属性。
在通过 JaxbConstants.JAXB_PART_NAMESPACE 设置 partNamespace 时,您需要以 {namespaceUri}localPart 格式指定其值,如下例所示。
.setHeader(JaxbConstants.JAXB_PART_NAMESPACE, constant("{http://www.camel.apache.org/jaxb/example/address/1}address"));
.setHeader(JaxbConstants.JAXB_PART_NAMESPACE, constant("{http://www.camel.apache.org/jaxb/example/address/1}address"));