我是来自孟买的Ashish,也是Apache Camel的新手。
目前我正在构建一个XML路由,它将扫描SOAP请求并将请求重定向到适当的URI。
我的肥皂请求如下:
<service xmlns="http://ws.madcomum.comprova.com">
<request>
<keysValues>
<item>
<bytesValue
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<dateValue
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<doubleValue
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<key>validatesOriginIntegrity</key>
<longValue
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<stringValue>z4x/FOOR+EPQ0vD9+itPSCBeNR4=</stringValue>
</item>
</keysValues>
<actionId>1</actionId>
<clientId>ARGO</clientId>
</request>
</service>
从这个SOAP信封中,我想使用Camel Route解析actionId标记的值。 如果actionId的值为1,则必须将route重定向到callService else到另一个服务。
我开发了路线逻辑,如下:
<route>
<from uri="cxf:bean:comprovaWS?dataFormat=MESSAGE" />
<when>
<xpath>//actionId=1</xpath>
<to uri="log:input" />
<to ref="callService" />
<to uri="log:output" />
</when>
<otherwise>
<to uri="log:input" />
<to ref="otherService"/>
<to uri="log:output" />
</otherwise>
</choice>
</route>
但这种逻辑不起作用。 我的路线有错误吗?
虽然我是Java人,但我不想在这里使用Java。我想依靠Camel本身。
请尽快帮助我。
此致
阿希什
答案 0 :(得分:0)
当你使用xpath时,95%的时候人们常常因名称空间而遇到麻烦。您的SOAP消息是使用命名空间定义的 - “http://ws.madcomum.comprova.com”。 xpath表达式必须使用此命名空间才能使其正常工作。
在http://camel.apache.org/xpath查看更多详细信息,使用XML配置
部分有一个示例此外,当您在MESSAGE模式下使用CXF时,请阅读有关流缓存的信息,因为该邮件基于流:http://camel.apache.org/stream-caching.html