2014-05-14 29 views
2

我試圖動態地創建基於傳入的XML一個RESTful URL來操縱輸出消息/套頭:駱駝:如何根據XPath表達式

輸入:

<message> 
    <request name="John"/> 
</message> 

我想航線它是這樣的:

http://myhost:8080/myservice?name=John 

我知道如何使用到的setHeader設置URL參數,但我不知道如何從輸入消息中提取的屬性值。該SOOPER_XPATH表達我要找的可能是這樣的:

from("direct:start") 
    .setHeader(Exchange.HTTP_QUERY, 
    simple("name=$SOOPER_XPATH(${in.body}, '//request/@name')") 
    .to("http://myhost:8080/myservice").log("Received response: ${in.body}); 
+3

你嘗試過這個XPath:''//請求/ @ name''? – har07

+0

事實上,片段中的xpath有一個錯字,// request @ name而不是// request/@ name,對此抱歉。但我的問題不在於xpath表達式。 –

回答

1

可能有幾種方法可以做到這一點,這就是我們在我的一個項目做,做工精細:

exchange.getIn().setHeader(XPathBuilder.xpath("/message/messageID/text()").evaluate(exchange,String.class)); 

我們在處理器內部執行此操作,但您也可以直接在路由中使用XPathBuilder。

這實際上只是一個讓xpath正確的問題。我通常使用一些工具,如http://www.xpathtester.com/xpath來測試我的xpaths。

+0

謝謝,我一直無法弄清楚如何在路線中使用它。改用處理器。 –

0

爲了設置頁眉中的Processor,使用外路線:

from("direct:start") 
    .setHeader(Exchange.HTTP_QUERY, xpath("//[email protected]").stringResult()) 
    .to("http://myhost:8080/myservice").log("Received response: ${in.body}");