10.6. トランスフォーマー
トランスフォーマーは、ルート定義で宣言された Input Type や Output Type に従って、メッセージの宣言的な変換を実行します。デフォルトの Camel メッセージは DataTypeAware を実装します。これは DataType で表されるメッセージタイプを保持します。
10.6.1. トランスフォーマーの仕組み リンクのコピーリンクがクリップボードにコピーされました!
ルート定義は Input Type や Output Type を宣言します。Input Type や Output Type がランタイムのメッセージタイプと異なる場合、Camel 内部プロセッサーはトランスフォーマーを検索します。トランスフォーマーは現在のメッセージタイプを予想されるメッセージタイプに変換します。メッセージが正常に変換されたり、メッセージが想定されるタイプである場合は、メッセージデータタイプが更新されます。
10.6.1.1. データタイプフォーマット リンクのコピーリンクがクリップボードにコピーされました!
データタイプのフォーマットは scheme:name です。scheme は、java、xml または json といったデータモデルのタイプで、name はデータタイプ名です。
scheme のみを指定すると、そのスキームですべてのデータタイプと一致します。
10.6.1.2. サポート対象のトランスフォーマー リンクのコピーリンクがクリップボードにコピーされました!
| トランスフォーマー | 説明 |
|---|---|
| データフォーマットトランスフォーマー | データフォーマットを使用した変換 |
| エンドポイントトランスフォーマー | エンドポイントを使用した変換 |
| カスタムトランスフォーマー | カスタムトランスフォーマークラスを使用した変換。 |
10.6.1.3. 共通オプション リンクのコピーリンクがクリップボードにコピーされました!
すべてのトランスフォーマーには、トランスフォーマーでサポートされるデータタイプを指定するための以下の共通のオプションがあります。
scheme または fromType および toType の両方を指定する必要があります。
10.6.1.4. DataFormat トランスフォーマーオプション リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | 説明 |
|---|---|
| type | データフォーマットの種類 |
| ref | データフォーマット ID への参照 |
bindy DataFormat タイプを指定する例は次のとおりです。
Java DSL の場合
XML DSL の場合
<dataFormatTransformer fromType="java:com.example.Order" toType="csv:CSVOrder">
<bindy id="csvdf" type="Csv" classType="com.example.Order"/>
</dataFormatTransformer>
<dataFormatTransformer fromType="java:com.example.Order" toType="csv:CSVOrder">
<bindy id="csvdf" type="Csv" classType="com.example.Order"/>
</dataFormatTransformer>
10.6.2. エンドポイントトランスフォーマーオプション リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | 説明 |
|---|---|
| ref | エンドポイント ID への参照 |
| uri | エンドポイント URI |
Java DSL でエンドポイント URI を指定する例:
transformer()
.fromType("xml")
.toType("json")
.withUri("dozer:myDozer?mappingFile=myMapping.xml...");
transformer()
.fromType("xml")
.toType("json")
.withUri("dozer:myDozer?mappingFile=myMapping.xml...");
XML DSL でエンドポイント ref を指定する例:
<transformers> <endpointTransformer ref="myDozerEndpoint" fromType="xml" toType="json"/> </transformers>
<transformers>
<endpointTransformer ref="myDozerEndpoint" fromType="xml" toType="json"/>
</transformers>
10.6.3. カスタムトランスフォーマーオプション リンクのコピーリンクがクリップボードにコピーされました!
トランスフォーマーは org.apache.camel.spi.Transformer のサブクラスである必要があります。
| 名前 | 説明 |
|---|---|
| ref | カスタムトランスフォーマー Bean ID への参照 |
| className | カスタムトランスフォーマークラスの完全修飾クラス名 |
カスタムトランスフォーマークラスを指定する例:
Java DSL の場合
transformer()
.fromType("xml")
.toType("json")
.withJava(com.example.MyCustomTransformer.class);
transformer()
.fromType("xml")
.toType("json")
.withJava(com.example.MyCustomTransformer.class);
XML DSL の場合
<transformers> <customTransformer className="com.example.MyCustomTransformer" fromType="xml" toType="json"/> </transformers>
<transformers>
<customTransformer className="com.example.MyCustomTransformer" fromType="xml" toType="json"/>
</transformers>
10.6.4. トランスフォーマーの例 リンクのコピーリンクがクリップボードにコピーされました!
この例は 2 つの部分があり、最初の部分はメッセージを変換するエンドポイントトランスフォーマーを宣言します。2 番目の部分は、トランスフォーマーをルートに適用する方法を示します。
10.6.4.1. 最初の部分 リンクのコピーリンクがクリップボードにコピーされました!
xslt コンポーネントを使用して xml:ABCOrder から xml:XYZOrder に変換する、エンドポイントトランスフォーマーを宣言します。
Java DSL の場合
transformer()
.fromType("xml:ABCOrder")
.toType("xml:XYZOrder")
.withUri("xslt:transform.xsl");
transformer()
.fromType("xml:ABCOrder")
.toType("xml:XYZOrder")
.withUri("xslt:transform.xsl");
XML DSL の場合
10.6.4.2. 2 番目の部分 リンクのコピーリンクがクリップボードにコピーされました!
direct:abc エンドポイントが direct:xyz にメッセージを送信するときに、上記のトランスフォーマーは以下のルート定義に適用されます。
Java DSL の場合
XML DSL の場合