第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() メソッドを呼び出します。たとえば、エクスチェンジオブジェクト (exchange) がある場合は、例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 型コンバーターを検索します。型コンバーターのレジストリーは、型マッピングのペア (toType, fromType) によってキーが設定されています。適切な型コンバーターがレジストリーにある場合、Master 型コンバーターが Slave の convertTo() メソッドを呼び出して、結果を返します。
  4. 適切な型コンバーターがレジストリーに ない 場合、Master 型コンバーターは型コンバーターローダーを使用して新しい型コンバーターをロードします。
  5. 型コンバーターローダーは、クラスパスで利用可能な JAR ライブラリーを検索し、適切な型コンバーターを検索します。現在、使用されるローダーストラテジーは、アノテーション型コンバーターローダーによって実装され、org.apache.camel.Converter アノテーションが付けられたクラスをロードしようとします。「TypeConverter ファイルの作成」 を参照してください。
  6. 型コンバーターローダーが正常に行われると、新しい Slave 型コンバーターがロードされ、型コンバーターレジストリーに登録されます。その後、この型コンバーターは value 引数を toType 型に変換するために使用されます。
  7. データが正常に変換されると、変換されたデータ値が返されます。変換が正常に行われない場合は、null が返されます。