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