2017-02-17 139 views
0

我通過交換對象發送soap xml。當我嘗試在apache駱駝中使用xpath發送請求時,我無法正確執行它。請建議 我的Exchange主體xml是Xpath不在駱駝路由工作

<Envelope><Header> 
    </Header> 
    <Body> 
    <Choice> 
     <Selector>1</selector> 
    </Choice> 
    </Body> 
</Envelope> 

我的駱駝路線

from(direct:XX) 
    .to(when(xpath("body()/Choice/Selector/.",String.class)=='1') 
    .to("direct:X") 
    .otherwise() 
    .to("direct:Y") 
+1

瞭解xpath的工作方式,並介紹名稱空間 –

回答

1
  1. 信封不能像她那樣。它必須是這樣的:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
        <soapenv:Header/>  
        <soapenv:Body> 
        ... 
    
  2. body()/Choice/Selector/.不是一個XPath。在XPath中沒有像body()這樣的東西。

假定有在由一些JAX-WS端點處理的Exchange.body一個SOAP主體內容的XPath將

/Choice/Selector/Choice/Selector/text()如果它是具有混合內容的元素

BTW :如果您的Envelope是真實的例子,您嘗試測試不要忘記修復您的XML - 您有錯誤<Selector>1</selector>標籤名稱區分大小寫。它必須是<Selector>1</Selector>

+1

並且您還必須使用名稱空間映射來使xpaths正常工作。閱讀文檔:http://camel.apache.org/xpath –