2017-02-17 104 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 –