60.4. 部分的なマーシャリング/アンマーシャリング
JAXB 2 は、XML ツリーフラグメントのマーシャリングとアンマーシャリングをサポートします。デフォルトでは、JAXB は指定のクラスで @XmlRootElement
アノテーションを検索し、XML ツリー全体で動作します。これは便利ですが、常に有効ではありません。生成されたコードに @XmlRootElement アノテーションがないため、ツリーの一部だけをアンマーシャリングする必要がある場合があります。
その場合、部分的なアンマーシャリングを使用できます。この動作を有効にするには、プロパティー partClass
を設定する必要があります。Camel は、このクラスを JAXB のアンマーシャラーに渡します。JaxbConstants.JAXB_PART_CLASS
がヘッダーの 1 つに設定されている場合(DataFormat に partClass プロパティーが設定されている場合でも)、DataFormat の プロパティーが surpass され、ヘッダーで設定された属性が使用されます。
マーシャリングの場合は、宛先 namespace の QName で partNamespace
属性を追加する必要があります。上記で確認できる Spring DSL の例
JaxbConstants.JAXB_PART_NAMESPACE
がヘッダーの 1 つに設定されている場合(DataFormat に partNamespace プロパティーが設定されている場合でも)、DataFormat の プロパティーが surpass され、ヘッダーに設定されたプロパティーが使用されます。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"));
...