TypeConverter是用来把一个对象转换成另一个对象,官方的文档地址为:http://camel.apache.org/type-converter.html
测试环境
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <version>2.15.2</version> <scope>provided</scope> </dependency>
package org.demo.osgi; import org.apache.camel.Exchange; public class TestProcessor { public void bean1(Exchange exchange) throws Exception { exchange.getOut().setBody("222"); } public void bean2(Exchange exchange) throws Exception { //这里会调用TypeConverter把字符串转换成User对象 System.out.println(exchange.getIn().getBody(User.class)); } }
package org.demo.osgi; import java.util.concurrent.TimeUnit; import org.apache.camel.Exchange; import org.apache.camel.TypeConversionException; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.model.RouteDefinition; import org.apache.camel.support.TypeConverterSupport; import org.apache.camel.util.jndi.JndiContext; /** * TypeConverter测试 */ public class TypeConverterTest { /** * 用法一 * 直接调用TypeConverter转换 */ public static void usage1(DefaultCamelContext context)throws Exception { User user = context.getTypeConverter().convertTo(User.class, "111"); System.out.println(user); } /** * 用法二 * 系统隐式转换 */ public static void usage2(DefaultCamelContext context)throws Exception { JndiContext jc = new JndiContext(); jc.bind("user", new TestProcessor()); context.setJndiContext(jc); RouteDefinition rd = new RouteDefinition(); rd.from("timer://aaa?repeatCount=1").to("bean:user?method=bean1").to("bean:user?method=bean2"); context.addRouteDefinition(rd); } public static void main(String[] args)throws Exception { DefaultCamelContext context = new DefaultCamelContext(); context.start(); context.getTypeConverterRegistry().addTypeConverter(User.class, String.class, new UserTypeConverterSupport()); usage1(context); usage2(context); TimeUnit.SECONDS.sleep(100); context.stop(); } } class User { private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } public String toString() { return "User [id=" + id + "]"; } } class UserTypeConverterSupport extends TypeConverterSupport { /** * 把字符串转换成User的TypeConverter */ public <T> T convertTo(Class<T> type, Exchange exchange, Object value) throws TypeConversionException { User user = new User(); user.setId(value.toString()); return type.cast(user); } }