在下面的mule流程中,我使用xpath来决定需要将消息发送到哪个队列。但是,即使XML具有tc =“121”,xpath表达式也返回false。你能说出我做错了什么吗?
下面是XPath评估的mule流和XML。
骡流:
<flow name="ProcessXMLRequest">
<jms:inbound-endpoint exchange-pattern="one-way" queue="mq.xml.request" />
<logger message="XML payload is #[payload]" level="INFO" />
<choice>
<when expression="/TXLife/TXLifeRequest/TransType/@tc='121'"
evaluator="xpath">
<jms:outbound-endpoint queue="mq.121.request.apps" />
</when>
<when
expression="/TXLife/TXLifeRequest/TransType/@tc='1122'"
evaluator="xpath">
<jms:outbound-endpoint queue="mq.1122.request.apps" />
</when>
<otherwise>
<jms:outbound-endpoint queue="mq.error"/>
</otherwise>
</choice>
</flow>
XML:
<TXLife xmlns:ns2="http://abc.com/services/mvi" xmlns="http://ACORD.org/Standards/Life/2">
<TXLifeRequest PrimaryObjectID="Holding_1">
<TransType tc="121">121</TransType>
<TransMode tc="2">2</TransMode>
</TXLifeRequest>
</TXLife>
答案 0 :(得分:3)
这是命名空间问题:您需要配置http://ACORD.org/Standards/Life/2
命名空间并在XPath表达式中使用它。
在Mule中,这是通过namespace manager以这种方式实现的:
<mulexml:namespace-manager>
<mulexml:namespace prefix="life2" uri="http://ACORD.org/Standards/Life/2"/>
</mulexml:namespace-manager>