36.4. 直接实施 Type Converter Directly
概述
通常,实现类型转换器的建议方法是使用注解的类,如上一节中所述 第 36.3 节 “使用注释实施类型 Converter”。但是,如果要完全控制类型转换器的注册,您可以实施自定义 worker 类型转换器,并将其添加到类型转换器 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());
其中,上下文是 当前 org.apache.camel.CamelContext 实例。addTypeConverter () 方法根据特定的类型转换(从 String.class 到 MyOrder.class )注册 MyOrderTypeConverter 类。
您可以将自定义类型转换器添加到 Camel 应用程序,而无需使用 META-INF 文件。如果您使用 Spring 或 Blueprint,则只能声明 <bean>。CamelContext 会自动发现 bean 并增加转换器。
<bean id="myOrderTypeConverters" class="..."/> <camelContext> ... </camelContext>
如果您有更多课程,可以声明多个 <bean>。