2012-09-12 44 views
0

我想要理清SOAP標頭的某個節點,以便在apache駱駝中執行粘性負載平衡。 而對於我使用XPath的 和我的XPath表達式看起來是這樣的:在apache駱駝的Xpath表達式中使用Substring:錯誤

.loadBalance().sticky(xpath("substring(string(/*[local-name()='Envelope']/*[local-name()='Header']/*[local-name()='ReplyTo']/*[local-name()='ReferenceParameters']/*[local-name()='ServiceGroupId']/text()), 10)")) 
.to(BE1,BE2); 

但是,當我執行它,我得到一個錯誤:org.apache.camel.builder.xml.InvalidXPathExpression: Invalid xpath:

所以我想應該有一些問題我的xpath表達式,因此我創建了一個小型java程序,可以執行相同的操作並執行相同的操作。 而用java我從我的XML獲得所需的元素。但我在apache駱駝中得到這個錯誤。

我在這裏做錯了什麼嗎?任何幫助將非常感激。

+0

您的XPath是正確的,適用於我的http://p3rl.org/XML::XSH2 – choroba

+0

如果xpath返回的節點數大於1,那麼我認爲string()和substring()函數將失敗 – Jayy

+1

@KaipaMSarma,不,只要參數是節點集,這些函數就會對第一個節點的字符串值進行操作。 –

回答

0

我明白了!

的代碼如下:

.loadBalance().sticky(env.xpath("substring(string(/soapenv:Envelope/soapenv:Header/wsa:ReplyTo/wsa:ReferenceParameters/axis2:Serv‌​iceGroupId/text()), 10)", String.class)) 
      .to(BE1,BE2); 

哪裏ENV是我的命名空間和BE​​1和BE2是後端服務器!