1

choice在我的 Mule 3.3 流程中使用下面显示的元素片段。XSL Transformer提供选择元素。XSL Transformer 应该返回一个String(实体名称),并且基于字符串值,我使用选择路由器将其推送到不同的 jms 队列。

<flow name="ProcessOrder">
    .
    .  
    <xm:xslt-transformer xsl-file="xsl/getEntity.xslt" returnClass="java.lang.String"/>
    <choice>
        <when expression="payload.contains('ABC')">             
            <jms:outbound-endpoint queue="order.queue1" />
        </when>
        <when>
        </when>
        <otherwise>         
        </otherwise>
    </choice>
</flow>

XSL 转换器返回此有效负载 <?xml version="1.0" encoding="UTF-8"?>ABC

我的问题是如何比较String返回的。我认为这不是payload.contains()最好的方法,虽然它解决了我的目的,而且我们不会返回匹配的实体,ABCxy但仍然不是一个完整的证明解决方案。

4

3 回答 3

1

在您的 xslt 中添加 omit-xml-declaration 部分,如下所示。这将为您提供没有序言的原始字符串。

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"    >

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
...
...

这会给

"ABC" as output instead of     "<?xml version="1.0" encoding="UTF-8"?>ABC"

然后在表达式中使用它

<when expression="#[message.payload.contains('ABC')]">

这样它应该可以工作。

于 2013-01-29T15:48:19.560 回答
0

也许这就是你正在寻找的:

<when evaluator="xpath" expression="/result/" ...

显然,您的 XSLT 将需要返回一个格式良好的 XML 文档,并在 XPath 可轻松访问的 XML 元素中返回所需的结果。

于 2013-01-29T15:37:58.270 回答
0

在 Mule 网站上,他们建议使用expression-splitter-router评估器,这是 mule 网站上的一个示例,说明如何使用它:

FruitBowl 包含一个苹果、一个橙子和两个香蕉。当 Mule 收到这个对象时,我们希望将水果路由到不同的位置:AppleService、BananaService 和 OrangeService。

<service name="Distributor">
    <inbound>
       <jms:inbound-endpoint queue="distributor.queue"/>
    </inbound>
    <outbound>
        <!-- FruitBowl.getFruit() List -->
        <expression-splitter-router evaluator="bean" expression="fruit">
            <vm:outbound-endpoint path="apple.service.queue">
                <payload-type-filter expectedType="org.mule.tck.testmodels.fruit.Apple"/>
            </vm:outbound-endpoint>
            <vm:outbound-endpoint path="banana.service.queue">
                <payload-type-filter expectedType="org.mule.tck.testmodels.fruit.Banana"/>
            </vm:outbound-endpoint>
            <vm:outbound-endpoint path="orange.service.queue">
                <payload-type-filter expectedType="org.mule.tck.testmodels.fruit.Orange"/>
            </vm:outbound-endpoint>
        </expression-splitter-router>
    </outbound>
</service>

希望有帮助

于 2013-01-29T15:49:23.293 回答