我的任务是根据soapAction 将消息路由到不同的jms 队列。我正在使用<cxf:proxy-service>
,所以除了在 WSDL 中填充属性之外,基本上没有其他方法可以找到调用了哪些操作soapAction
(除非有人告诉我其他情况)。所以这就是我想要实现的目标:
<choice>
<when expression="message.inboundProperties['SOAPAction'] == 'submitOrderStatus'">
<jms:outbound-endpoint queue="mviq.1122.result" />
</when>
....
</choice>
但是即使我使用记录器打印下面显示的表达式,上面的代码也不会评估为真,我得到"submitOrderStatus"
<logger message="SoapAction is #[message.inboundProperties['SOAPAction']]" level="INFO" />
在对日志文件进行了太长时间和数小时的分析之后,我意识到除了SOAPAction
. 所以把我的流程改成这个救了我:
<when expression="message.inboundProperties['SOAPAction'] == '"submitOrderStatus"'">
<logger message="Can evaluate this message.inboundProperties['SOAPAction'] == '"submitOrderStatus"'" level="INFO" />
<jms:outbound-endpoint queue="mviq.1122.result" />
</when>
我很想知道为什么 Mule 将 SoapAction 作为双引号字符串返回
编辑: SoapUI 通过网络发送这个。我不确定为什么SOAPAction
被引用。
POST http://localhost:61005/mvi/service HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "submitOrderStatus"
Content-Length: 5355
Host: localhost:61005
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)`
以下是我的 wsdl 的一部分:
<wsdl:operation name="submitOrderStatus">
<soap:operation soapAction="submitOrderStatus" style="document"/>
<wsdl:input name="submitOrderStatusRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="submitOrderStatusResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>