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> を宣言することができます。