36.4. 型コンバーターの直接実装
概要
通常、型コンバーターを実装する方法として、前述のセクション 「アノテーションを使用した型コンバーターの実装」 で説明されているように、アノテーション付きクラスを使用することが推奨される方法です。ただし、型コンバーターの登録を完全に制御する場合は、ここで説明するように、カスタムのワーカー型コンバーターを実装し、型コンバーターレジストリーに直接追加することができます。
TypeConverter インターフェイスの実装
独自の型コンバータークラスを実装するには、TypeConverter
インターフェイスを実装するクラスを定義します。たとえば、以下の MyOrderTypeConverter
クラスは整数値を MyOrder
オブジェクトに変換します。整数値は MyOrder
オブジェクトの order ID を初期化するために使用されます。
import org.apache.camel.TypeConverter private class MyOrderTypeConverter implements TypeConverter { public <T> T convertTo(Class<T> type, Object value) { // converter from value to the MyOrder bean MyOrder order = new MyOrder(); order.setId(Integer.parseInt(value.toString())); return (T) order; } public <T> T convertTo(Class<T> type, Exchange exchange, Object value) { // this method with the Exchange parameter will be preferd by Camel to invoke // this allows you to fetch information from the exchange during convertions // such as an encoding parameter or the likes return convertTo(type, value); } public <T> T mandatoryConvertTo(Class<T> type, Object value) { return convertTo(type, value); } public <T> T mandatoryConvertTo(Class<T> type, Exchange exchange, Object value) { return convertTo(type, value); } }
型コンバーターのレジストリーへの追加
以下のようなコードを使用して、カスタム型コンバーターを 直接 型コンバーターレジストリーに追加できます。
// Add the custom type converter to the type converter registry context.getTypeConverterRegistry().addTypeConverter(MyOrder.class, String.class, new MyOrderTypeConverter());
context
は、現在の org.apache.camel.CamelContext
インスタンスです。addTypeConverter()
メソッドは、String.class
から MyOrder.class
への特定の型変換に対して MyOrderTypeConverter
クラスを登録します。
カスタム型コンバーターは、META-INF
ファイルを使用せずに Camel アプリケーションに追加することができます。Spring または Blueprint を使用している場合は、<bean> を宣言すればよいだけです。CamelContext は Bean を自動的に検出し、コンバーターを追加します。
<bean id="myOrderTypeConverters" class="..."/> <camelContext> ... </camelContext>
複数のクラスがある場合は、複数の <bean> を宣言することができます。