0

我是来自孟买的 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,则必须将路由重定向到 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>

但是这个逻辑是行不通的。我的路线有错误吗?

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

请尽快帮助我。

问候,

阿什什

4

1 回答 1

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

于 2012-12-29T08:57:43.217 回答