第39章 Dozer


Dozer コンポーネント

dozer: コンポーネントは、Dozer マッピングフレームワークを使用して Java Bean 間のマッピング機能を提供します。Camel は、Dzer マッピングを 型コンバーター として トリガーする機能もサポートします。Dozer エンドポイントと Dozer コンバーターの使用の主な相違点は次のとおりです。
  • コンバーターレジストリーを介して、エンドポイントごとに Dozer マッピング設定とグローバル設定を管理する機能。
  • Dozer エンドポイントは、Camel データ形式を使用して入出力データをマーシャリングまたはアンマーシャリングし、単一の任意の変換エンドポイントをサポートするように設定できます。
  • Dozer コンポーネントでは、Dozer のより詳細な統合と拡張を追加機能(たとえば、リテラル値のマッピング、マッピングの式の使用など)することができます。
Dozer コンポーネントを使用するには、Maven ユーザーは以下の依存関係を pom.xml に追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-dozer</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください

URI 形式

Dozer コンポーネントはプロデューサーエンドポイントのみをサポートします。
dozer:endpointId[?options]
Copy to Clipboard Toggle word wrap
ここで、endpointId は、Dozer エンドポイント設定を一意に識別するために使用される名前です。
例:Dozer エンドポイント URI:
from("direct:orderInput").
  to("dozer:transformOrder?mappingFile=orderMapping.xml&targetModel=example.XYZOrder").
  to("direct:orderOutput");
Copy to Clipboard Toggle word wrap

オプション

Expand
名前
デフォルト
説明
mappingFile
dozerBeanMapping.xml
Dozer 設定ファイルの場所。デフォルトでは、ファイルはクラスパスから読み込まれますが、file:classpath:、または http: を使用して、特定の場所から設定を読み込むことができます。
unmarshalId
none
Java 以外のタイプからマッピング入力をアンマーシャリングするために使用する Camel Context 内で定義された dataFormat の ID。
marshalId
none
マッピング出力を Java 以外のタイプにマーシャリングするために使用する Camel Context 内で定義された dataFormat の ID。
sourceModel
none
マッピングで使用されるソースタイプの完全修飾クラス名。これが指定されている場合、マッピングへの入力は、Dozer でマッピングされる前に指定された型に変換されます。
targetModel
none
マッピングで使用されるターゲットタイプの完全修飾クラス名。このオプションは必須です。
mappingConfiguration none Dozer マッピングの設定に使用する Camel レジストリーの DozerBeanMapperConfiguration Bean の名前。これは、Dzer の設定方法を詳細に制御するために使用可能な mappingFile オプションの代替手段です。値に "#" 接頭辞を使用して、Bean が Camel レジストリーにあることを示します(例:#myDozerConfig)。

Dozer でのデータフォーマットの使用

Dozer はマッピングの Java 以外のソースおよびターゲットをサポートしないため、XML ドキュメントを独自の Java オブジェクトにマッピングすることはできません。Camel は Java と データ 形式を使用したさまざまなフォーマットのマーシャリングを広範囲にサポートしています。Dozer コンポーネントは、Dozer を介して処理される前に入出力データをデータ形式で渡すように指定できるため、このサポートを利用します。Dozer への呼び出し外で常にこれを実行できますが、Dozer コンポーネントで直接サポートすることで、単一のエンドポイントを使用して Camel 内で任意の変換を設定できます。
たとえば、Dozer コンポーネントを使用して XML データ構造と JSON データ構造をマッピングしたとします。Camel コンテキストで以下のデータ形式が定義されている場合:
<dataFormats>
  <json library="Jackson" id="myjson"/>
  <jaxb contextPath="org.example" id="myjaxb"/>
</dataFormats>
Copy to Clipboard Toggle word wrap
その後、Jackson データ形式を使用して入力 XML をアンマーシャリングし、Jackson を使用してマッピング出力をマーシャリングするように Dozer エンドポイントを設定できます。
<endpoint uri="dozer:xml2json?marshalId=myjson&amp;unmarshalId=myjaxb&amp;targetModel=org.example.Order"/>
Copy to Clipboard Toggle word wrap

Dozer の設定

すべての Dozer エンドポイントには、ソースおよびターゲットオブジェクト間のマッピングを定義する Dozer マッピング設定ファイルが必要です。mappingFile または mappingConfiguration オプションがエンドポイントで指定されていない場合、コンポーネントは META-INF/dozerBeanMapping.xml の場所にデフォルト設定されます。1 つのエンドポイントに複数のマッピング設定ファイルを提供する必要がある場合、または追加の設定オプション(イベントリスナー、カスタムコンバーターなど)を指定する必要がある場合は、org.apache.camel.converter.dozer.DozerBeanMapperConfiguration のインスタンスを使用できます。
<bean id="mapper" class="org.apache.camel.converter.dozer.DozerBeanMapperConfiguration">  
  <property name="mappingFiles">
    <list>
      <value>mapping1.xml</value>
      <value>mapping2.xml</value>
    </list>
  </property>
</bean>
Copy to Clipboard Toggle word wrap

マッピング拡張機能

Dozer コンポーネントは、Dozer マッピングフレームワークにカスタムコンバーターとして多くの拡張機能を実装します。これらのコンバーターは、Dzer 自体で直接サポートされていないマッピング関数を実装します。

変数マッピング

変数のマッピングにより、Dozer 設定内の変数定義の値をソースフィールドの値を使用する代わりに、ターゲットフィールドにマップできます。これは、他のマッピングフレームワークの定数マッピングと同等で、はリテラル値をターゲットフィールドに割り当てることができます。変数マッピングを使用するには、マッピング設定で変数を定義し、VariableMapper クラスから選択したターゲットフィールドにマップします。
<mappings xmlns="http://dozer.sourceforge.net" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
  <configuration>
    <variables>
      <variable name="CUST_ID">ACME-SALES</variable>
    </variables>
  </configuration>
  <mapping>
    <class-a>org.apache.camel.component.dozer.VariableMapper</class-a>
    <class-b>org.example.Order</class-b>
    <field custom-converter-id="_variableMapping" custom-converter-param="${CUST_ID}">
      <a>literal</a>
      <b>custId</b>
    </field>
  </mapping>
</mappings>
Copy to Clipboard Toggle word wrap

カスタムマッピング

カスタムマッピングにより、ソースフィールドがターゲットフィールドにマップされる方法についての独自のロジックを定義できます。Dozer のカスタマーコンバーターと機能的に似ており、以下の 2 つの相違点があります。
  • カスタムマッピングを持つ単一のクラスに複数のコンバーターメソッドを設定できます。
  • カスタムマッピングを使用して Dozer 固有のインターフェイスを実装する必要はありません。
カスタムマッピングは、マッピング設定で組み込みの '_customMapping' コンバーターを使用して宣言されます。このコンバーターの パラメーターの構文は以下のとおりです。
[class-name][,method-name]
Copy to Clipboard Toggle word wrap
メソッド名はオプションです。Dozer コンポーネントは、マッピングに必要な入出力タイプに一致するメソッドを検索します。カスタムマッピングと設定の例を以下に示します。
public class CustomMapper {
    // All customer ids must be wrapped in "[ ]"
    public Object mapCustomer(String customerId) {
        return "[" + customerId + "]";
    }
}
Copy to Clipboard Toggle word wrap
<mappings xmlns="http://dozer.sourceforge.net" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
  <mapping>
    <class-a>org.example.A</class-a>
    <class-b>org.example.B</class-b>
    <field custom-converter-id="_customMapping" 
	    custom-converter-param="org.example.CustomMapper,mapCustomer">
      <a>header.customerNum</a>
      <b>custId</b>
    </field>
  </mapping>
</mappings>
Copy to Clipboard Toggle word wrap

式マッピング

式マッピングを使用すると、Camel の強力な 言語 機能を使用して式を評価し、結果をマッピングのターゲットフィールドに割り当てることができます。Camel がサポートする言語は、式マッピングで使用できます。式の基本的な例には、Camel メッセージヘッダーまたはエクスチェンジプロパティーをターゲットフィールドにマップしたり、複数のソースフィールドをターゲットフィールドに連結したりする機能が含まれます。マッピング式の構文は次のとおりです。
[language]:[expression]
Copy to Clipboard Toggle word wrap
メッセージヘッダーをターゲットフィールドにマップする例:
<mappings xmlns="http://dozer.sourceforge.net" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
  <mapping>
    <class-a>org.apache.camel.component.dozer.ExpressionMapper</class-a>
    <class-b>org.example.B</class-b>
    <field custom-converter-id="_expressionMapping" custom-converter-param="simple:\${header.customerNumber}">
      <a>expression</a>
      <b>custId</b>
    </field>
  </mapping>
</mappings>
Copy to Clipboard Toggle word wrap
Dozer が EL を使用して定義された変数値を解決しようとするとエラーを防ぐために、式内のプロパティーを "\" でエスケープする必要があります。

Dozer 型変換

Dozer コンポーネントは、Dozer Mapping フレームワークを使用して Java Bean 間のマッピング機能を提供します。ただし、Camel は Dozer マッピングを型コンバーターとしてトリガーする機能もサポートします。
CamelContext camelctx = new DefaultCamelContext();
camelctx.addRoutes(new RouteBuilder() {
    @Override
    public void configure() throws Exception {
        from("direct:start").convertBodyTo(CustomerB.class);
    }
});

DozerBeanMapperConfiguration mconfig = new DozerBeanMapperConfiguration();
mconfig.setMappingFiles(Arrays.asList(new String[] { "mappings.xml" }));
new DozerTypeConverterLoader(camelctx, mconfig);
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat