第57章 JacksonXML
Jackson XML は、Jackson ライブラリー と XMLMapper 拡張機能 を使用して、XML ペイロードを Java オブジェクトにアンマーシャリングするか、Java オブジェクトを XML ペイロードにマーシャリングするデータ形式です。注記: Jackson に精通している場合、この XML データ形式は対応する JSON と同じように動作するため、JSON シリアライゼーション/デシリアライゼーションのアノテーションが付けられたクラスで使用できます。
この拡張機能は、JAXB のコードファーストアプローチ も模倣しています。
このデータ形式は、高速で効率的な XML プロセッサーである Woodstox (特に Pretty Print などの機能) に依存しています。
from("activemq:My.Queue"). unmarshal().jacksonxml(). to("mqseries:Another.Queue");
57.1. JacksonXML オプション
JacksonXML データ形式は、以下に示す 15 のオプションをサポートしています。
名前 | デフォルト | Java タイプ | 説明 |
---|---|---|---|
xmlMapper |
| 指定された ID を持つ既存の XmlMapper を検索して使用します。 | |
prettyPrint | false |
| 適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。 |
unmarshalType |
| アンマーシャリング時に使用する Java 型のクラス名。 | |
jsonView |
| POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。 | |
include |
| pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。 | |
allowJmsType |
| JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。 | |
collectionType |
| 使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。 | |
useList |
| Map の List または Pojo の List にアンマーシャリングします。 | |
enableJaxbAnnotationModule |
| jackson の使用時に JAXB アノテーションモジュールを有効にするかどうか。有効にすると、Jackson によって JAXB アノテーションを使用できます。 | |
moduleClassNames |
| カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。 | |
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 はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。 | |
contentTypeHeader |
| データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。 |
57.1.1. Spring DSL での Jackson XML の使用
Spring DSL でデータ形式を使用する場合には、最初にデータ形式を宣言する必要があります。これは DataFormats XML タグで行われます。
<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>
57.1.2. POJO フィールドをマーシャリングから除外する
POJO を XML にマーシャリングするときに、XML 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビュー を使用してこれを実現できます。まず、1 つ以上のマーカークラスを作成します。
@JsonView
アノテーションでマーカークラスを使用して、特定のフィールドの追加や除外を行います。アノテーションはゲッターでも機能します。
最後に、Camel JacksonXMLDataFormat
を使用して、上記の POJO を XML にマーシャリングします。
結果の XML に weight フィールドがないことに注意してください。
<pojo age="30" weight="70"/>