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

型変換プロセス

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

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