Apache camel 希望构建一个路由,该路由将检查Soap请求的内容并将请求传递给适当的URI

Apache camel 希望构建一个路由,该路由将检查Soap请求的内容并将请求传递给适当的URI,apache-camel,apache-servicemix,fuseesb,Apache Camel,Apache Servicemix,Fuseesb,我是来自孟买的阿什什,对阿帕奇骆驼非常陌生 目前,我正在用XML构建一个路由,它将扫描SOAP请求,并将请求重定向到适当的URI 我的Soap请求如下所示: 验证原始完整性 z4x/FOOR+EPQ0vD9+itPSCBeNR4= 1. 阿尔戈 从这个SOAP信封中,我想使用驼峰路由解析actionId标记的值。 如果actionId的值为1,则必须将路由重定向到callService,或者重定向到另一个服务 我开发了如下路线逻辑: <route> <

我是来自孟买的阿什什,对阿帕奇骆驼非常陌生

目前,我正在用XML构建一个路由,它将扫描SOAP请求,并将请求重定向到适当的URI

我的Soap请求如下所示:


验证原始完整性
z4x/FOOR+EPQ0vD9+itPSCBeNR4=
1.
阿尔戈

从这个SOAP信封中,我想使用驼峰路由解析actionId标记的值。 如果actionId的值为1,则必须将路由重定向到callService,或者重定向到另一个服务

我开发了如下路线逻辑:

<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>

//actionId=1
但这种逻辑是行不通的。 我的路线有错误吗

虽然我是Java爱好者,但我不想在这里使用Java。我想依靠骆驼本身

请尽快帮助我

问候,
Ashish

当您使用xpath时,95%的情况下人们遇到的问题通常是由于名称空间造成的。您的SOAP消息是使用命名空间定义的—http://ws.madcomum.comprova.com". xpath表达式必须使用此命名空间才能工作

有关更多详细信息,请参见:,在使用XML配置一节中有一个示例


同样,当您在消息模式下使用CXF时,请阅读关于流缓存的内容,因为消息是基于流的:

亲爱的克劳斯,感谢您的回复!!!我使用JavaXPath应用程序检查了XPATH,该应用程序不使用名称空间。除了名称空间之外,路由逻辑是否需要任何更改?我的路线逻辑正确吗?请等待您的答复。在Java中,XPathExpression必须具有名称空间。它是Camel从JDK使用的XPath所必需的。有一种使用local-name()样式的方法(不记得它的确切语法,所以google/在stackoverflow中查看更多)感谢您的建议。。。我已经在标记中添加了名称并启用了。标记中的streamCache。它现在正在工作。。。再次感谢。。。
<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>