第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 型変換プロセス

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