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