想要构建一个检查Soap请求内容的路由,并将请求传递给适当的URI

时间:2012-12-28 17:21:28

标签: apache-camel apache-servicemix fuseesb

我是来自孟买的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本身。

请尽快帮助我。

此致

阿希什

1 个答案:

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