第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); }
controller 型のコンバーター
Apache Camel タイプのコンバーターメカニズムは、コントローラー/ワーカーのパターンに従います。それぞれが限られた数の型変換を実行することができる多数の worker 型コンバーターと、スレーブによって実行された型変換を集約する単一の controller 型コンバーターがあります。controller 型のコンバーターは、worker 型のコンバーターのフロントエンドとして機能します。コントローラーに型変換の実行を要求すると、コントローラーは適切なワーカーを選択し、変換タスクをそのワーカーに委任します。
変換メカニズムにアクセスするためのエントリーポイントを提供するため、controller 型コンバーターは型変換メカニズムのユーザーにとって最も重要です。起動時に、Apache Camel は Controller 型コンバーターインスタンスを自動的に CamelContext
オブジェクトに関連付けます。Controller 型コンバーターへの参照を取得するには、CamelContext.getTypeConverter()
メソッドを呼び出します。たとえば、エクスチェンジオブジェクト (exchange
) がある場合は、例36.2「controller 型コンバーターの取得」 のように Controller 型コンバーターへの参照を取得できます。
例36.2 controller 型コンバーターの取得
org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter();
型コンバーターローダー
controller 型コンバーターは、型コンバータローダーを使用して、ワーカー型コンバータのレジストリーにデータを入力します。型コンバーターローダーは、TypeConverterLoader インターフェイスを実装するクラスです。Apache Camel は現在、1 種類の型コンバーターローダーのみを使用します。つまり、アノテーション型コンバーター ローダー (AnnotationTypeConverterLoader
型) のみを使用します。。
型変換プロセス
図36.1「型変換プロセス」 は、型変換プロセスの概要を説明し、与えられたデータ値 (value
) を指定された型 (toType
) に変換する際の手順を示しています。
図36.1 型変換プロセス
型変換メカニズムは以下のように行われます。
-
CamelContext
オブジェクトは、Controller 型コンバーターインスタンスへの参照を保持します。変換プロセスの最初のステップは、CamelContext.getTypeConverter()
を呼び出し、Controller 型コンバーターを取得することです。 -
Controller 型コンバーターの
convertTo()
メソッドを呼び出すと、型変換が開始されます。このメソッドは、データオブジェクトvalue
を元の型からtoType
引数で指定された型に変換するように、型コンバーターへ指示します。 -
Controller 型コンバーターは多くの異なる Worker 型コンバーターのフロントエンドであるため、型マッピングのレジストリーをチェックすることで適切な Worker 型コンバーターを検索します。型コンバーターのレジストリーは、型マッピングのペア
(toType, fromType)
によってキーが設定されています。適切な型コンバーターがレジストリーにある場合、Controller 型コンバーターが Worker のconvertTo()
メソッドを呼び出して、結果を返します。 - 適切な型コンバーターがレジストリーに ない 場合、controller 型コンバーターは型コンバーターローダーを使用して新しい型コンバーターをロードします。
-
型コンバーターローダーは、クラスパスで利用可能な JAR ライブラリーを検索し、適切な型コンバーターを検索します。現在、使用されるローダーストラテジーは、アノテーション型コンバーターローダーによって実装され、
org.apache.camel.Converter
アノテーションが付けられたクラスをロードしようとします。「TypeConverter ファイルの作成」 を参照してください。 -
型コンバーターローダーが正常に行われると、新しい worker 型コンバーターがロードされ、型コンバーターレジストリーに登録されます。その後、この型コンバーターは
value
引数をtoType
型に変換するために使用されます。 -
データが正常に変換されると、変換されたデータ値が返されます。変換が正常に行われない場合は、
null
が返されます。