2015-07-03 111 views
0

是否有一個襯墊的Java DSL做到以下幾點:的Java DSL設置在駱駝交換性能對象實例

.process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     exchange.setProperty("name", new MyBean()); 
    } 
}) 

的目標是有一個屬性「名稱」爲myBean類的一個新實例初始化在路由中的其他邏輯之前。

我認爲這必須是形式:

.setProperty("name", ... expression ...) 

我無法找到合適的表達。

謝謝。

+0

我可以做一個自定義表達式:
公共靜態表達的newInstance(final類clazz所){ \t回報新ExpressionAdapter(){ \t \t @覆蓋 \t \t公共對象評價(外匯兌換){ \t \t \t嘗試{ \t \t \t \t return clazz.newInstance(); \t \t \t}趕上(例外五){ \t \t \t \t拋出新拋出:IllegalArgumentException( 「不能實例化類 '」 + clazz.getName()+ 「':」 + e.getMessage()); \t \t \t} \t \t} \t}; } 但肯定必須有一個現有的表達式.. – JStefan

+0

Ahhrgg,抱歉不善於評論語法。 – JStefan

回答

0

是的。

from("direct:in") 
    .setProperty("key").constant(new MyBean()) 
    .to("direct:out") 

您還可以使用.ref("bean-ref")成是指在註冊表

+0

常量會爲每個新消息提供相同的對象實例。這不是我所需要的。 – JStefan

+0

將bean設置爲原型會引發每個交換機的新對象,否則您需要使用類似於您的問題狀態的處理器來執行此操作,否則請調用執行相同操作的bean。或者如果你真的想保持在DSL中,那麼這可能會工作'.setProperty(「key」)。groovy(「new foo.bar.MyBean()」)',但我沒有測試它 – stringy05