第36章 型コンバーター

概要

Apache Camel には組み込みの型変換メカニズムがあり、メッセージボディーとメッセージヘッダーを異なる型へ変換するために使用されます。本章では、独自の型コンバーターメソッドを追加して、型変換メカニズムを拡張する方法を説明します。

36.1. 型コンバーターアーキテクチャー

概要

本セクションでは、カスタム型コンバーターを作成する際に理解しておく必要がある、型コンバーターメカニズムの全体的なアーキテクチャーについて説明します。組み込み型コンバーターのみを使用する必要がある場合は、34章メッセージ形式について を参照してください。

型コンバーターインターフェース

例36.1「TypeConverter インターフェース」 は、すべての型コンバーターが実装する必要のある org.apache.camel.TypeConverter インターフェースの定義を示しています。

例36.1 TypeConverter インターフェース

package org.apache.camel;

public interface TypeConverter {
    <T> T convertTo(Class<T> type, Object value);
}

Master 型コンバーター

Apache Camel 型コンバーターメカニズムは、Master/Slave パターンに従います。それぞれが限られた数の型変換を実行することができる多数の Slave 型コンバーターと、スレーブによって実行された型変換を集約する単一の Master 型コンバーターがあります。Master 型コンバーターは、Slave 型コンバーターのフロントエンドとして機能します。Master に型変換を実行するよう要求すると、適切な Slave を選択し、変換タスクをその Slave に委譲します。

変換メカニズムにアクセスするためのエントリーポイントを提供するため、Master 型コンバーターは型変換メカニズムのユーザーにとって最も重要です。起動中に、Apache Camel は Master 型コンバーターインスタンスを自動的に CamelContext オブジェクトに関連付けます。Master 型コンバーターへの参照を取得するには、CamelContext.getTypeConverter() メソッドを呼び出します。たとえば、エクスチェンジオブジェクト(エクスチェンジ)がある場合は、例36.2「Master 型コンバーターの取得」 のように Master 型コンバーターへの参照を取得できます。

例36.2 Master 型コンバーターの取得

org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter();

型コンバーターローダー

Master 型コンバーターは、型コンバーターローダー を使用して、Slave 型コンバーターのレジストリーを設定します。型コンバーターローダーは、TypeConverterLoader インターフェースを実装するクラスです。Apache Camel は現在、1 種類の型コンバーターローダーのみを使用します。つまり、アノテーション型コンバーター ローダー (AnnotationTypeConverterLoader 型) のみを使用します。。

型変換プロセス

図36.1「型変換プロセス」 は、型変換プロセスの概要を説明し、与えられたデータ値 (value) を指定された型 (toType) に変換する際の手順を示しています。

図36.1 型変換プロセス

型変換プロセス

型変換メカニズムは以下のように行われます。

  1. CamelContext オブジェクトは Master TypeConverter インスタンスへの参照を保持します。変換プロセスの最初のステップは、CamelContext.getTypeConverter()を呼び出すことで Master 型コンバーターを取得することです。
  2. 型変換は、Master 型コンバーターで convertTo() メソッドを呼び出すことで開始されます。このメソッドは、データオブジェクト value を元の型から toType 引数で指定された型に変換するように、型コンバーターへ指示します。
  3. Master 型コンバーターは多くの異なる Slave 型コンバーターのフロントエンドであるため、型マッピングのレジストリーをチェックすることで、適切な Slave 型コンバーターを検索します。型コンバーターのレジストリーは、型マッピングのペア からタイプ) よってキーになり ます。適切な型コンバーターがレジストリーにある場合、Master 型コンバーターはスレーブの convertTo() メソッドを呼び出して結果を返します。
  4. 適切な型コンバーターがレジストリーに ない 場合、Master 型コンバーターは型コンバーターローダーを使用して新しい型コンバーターをロードします。
  5. 型コンバーターローダーは、クラスパスで利用可能な JAR ライブラリーを検索し、適切な型コンバーターを検索します。現在、使用されるローダーストラテジーは、アノテーション型コンバーターローダーによって実装され、org.apache.camel.Converter アノテーションが付けられたクラスをロードしようとします。「TypeConverter ファイルの作成」 を参照してください。
  6. 型コンバーターローダーが正常に行われると、新しい Slave 型コンバーターがロードされ、型コンバーターレジストリーに登録されます。その後、この型コンバーターは value 引数を toType 型に変換するために使用されます。
  7. データが正常に変換されると、変換されたデータ値が返されます。変換が正常に行われない場合は、null が返されます。