2014-11-06 98 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