2015-09-07 84 views
0

我有一個簡單的駱駝路線定義,將消耗一個XML消息。如何從駱駝體中檢索特定內容以傳遞給駱駝路徑中的bean方法?

的路線如下:

from("from-endpoint").bean(myBean, "method1").log("$body")to("to-endpoint) 

的bean定義如下:

class MyBean { 
    public void method1(String value) { 
     //so something with value 
    } 
} 

示例XML消息如下:

<name> 
    <value>new value<value> 
</name> 

我想找回屬性「值」的值並將其傳遞給我的bean方法。我想在我的路由中檢索屬性值,並讓我的bean實現清除對xml結構的引用。我也想確保路由仍然傳播原始主體,因此我不希望有一個bean從上面提取XML值並將其傳遞給下游。

希望這是明確的。

回答

2

之前將其發送到豆你可以設置一個標頭值:

.setHeader("value", xpath("/name/value/text()")) 

然後

class MyBean { 
    public void method1(Exchange exchange) { 
     System.out.println("MyBean - " + exchange.getIn().getHeader("value", String.class)); 
    } 
} 
+0

這是我不想把我的豆現在需要有XML結構的理解的做法。我想在路線定義本身內處理這個問題。請參考我的問題中的最後一段。 – Mahesh

+0

對不起,我編輯了答案。 – J2B

0

如果你不希望在即將到來的淨荷履行任何形式的XML功能那麼你可以使用JAXB或XStream解析器解組傳入的負載,然後你將擁有一個POJO來處理而不是XML操作。同樣在你的路線中,如果你沒有在交換機身上設置任何東西,那麼有效載荷保持不變。

1
class MyBean implements Processor { 
public void method1(Exchange exchange)throws Exception { 

Foo foo = exchange.getIn().getBody(foo.class); 
    value = foo.getvalue(); 
    //so something with value 
} 
} 
1
class MyBean implements Processor { 

    @override 
    public void process(Exchange exchange)throws Exception { 

    Foo foo = exchange.getIn().getBody(foo.class); 
     value = foo.getvalue(); 
    } 
}