Apache Camel TypeConverter的使用

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);
	}
}


你可能感兴趣的:(camel)