2014-11-06 57 views
0

我使用骆驼2.13.1我想一个类,参数传递给我的方法之一,在beanApache的骆驼的Java DSL传递类参数bean方法

我可以这样做

In Route 
    -- 
    .beanRef("someSpringBeanRef","someMethod(${body},com.test.TestObject)") 
    -- 

And in Bean 
     public Object someMethod(String testBody, Class type){ 

我知道我可以在头中发送合格的类名,并在bean中使用它,但感觉不太好。还有其他的选择吗?

我看到这个链接,但对我来说 Apache Camel - Spring DSL - Pass String argument to bean method

回答

0

Class类型的方法参数不支持它没有工作。从Camel documentation

骆驼使用以下规则来确定,如果它在该方法选项

  • 的值是真或假的参数值,其表示一个布尔值
  • 的值是一个数字值,如123或7
  • 的值是封闭用单引号或双引号字符串
  • 值为null其表示一个空值
  • 可以使用Simple语言进行评估,这意味着您可以使用body,header.foo和其他简单标记。请注意,令牌必须包含在$ {}中。
0

您可以尝试使用通配符“*”。骆驼会尝试将参数转换为正确的类型。

路线:

public class Routes extends RouteBuilder { 
    public void configure() throws Exception { 
     from("direct:in").bean(new TestBean(), "test(*, ${body})"); 
    } 
} 

豆:

public class TestBean { 
    public void test(Class<?> clazz, String str) { 
     System.out.println(clazz); 
    }   
} 

骆驼上下文:

public static void main(String[] args) throws Exception { 
    CamelContext ctx = new DefaultCamelContext(); 
    ctx.addRoutes(new Routes()); 
    ctx.start();   
    ctx.createProducerTemplate().sendBody("direct:in", String.class); 
    ctx.createProducerTemplate().sendBody("direct:in", "java.lang.String"); 
} 

输出:

class java.lang.String 
class java.lang.String