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>
下面例子展示了TypeConverter的两种用法
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);
}
}