36.4. 直接实施类型转换器

概述

通常,推荐的实现类型转换器的方法是使用注解的类,如上一节中所述,第 36.3 节 “使用注解实现类型转换器”。但是,如果您想要完全控制您的类型转换器的注册,您可以实现自定义从属类型转换器,并将它直接添加到类型转换器 registry 中,如下所述。

实施 TypeConverter 接口

要实施您自己的类型转换器类,请定义一个实施 TypeConverter 接口的类。例如,以下 MyOrderTypeConverter 类将整数值转换为 MyOrder 对象,其中整数值用于在 MyOrder 对象中初始化顺序 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);
    }
}

将类型转换器添加到 registry

您可以使用类似如下的代码将自定义类型转换器 直接添加到 类型转换器 registry 中:

// 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 () 方法根据特定的类型转换注册 MyOrderTypeConverter 类,从 String.classMyOrder.class

您可以将自定义类型转换器添加到 Camel 应用程序,而无需使用 META-INF 文件。如果使用 SpringBlueprint,则只需声明 <bean> 即可。CamelContext 会自动发现 bean,并添加转换器。

<bean id="myOrderTypeConverters" class="..."/>
 <camelContext>
   ...
</camelContext>

如果您有更多类,可以声明多个 <bean>s。