0

我的任务是根据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'] == '&quot;submitOrderStatus&quot;'">
    <logger message="Can evaluate this message.inboundProperties['SOAPAction'] == '&quot;submitOrderStatus&quot;'" 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>
4

1 回答 1

2

除了在 WSDL 中填充soapAction 属性外,没有其他方法可以找到调用了什么操作

cxf_operation这是不正确的:在我的答案https://stackoverflow.com/a/14163660/387927中查看我如何从流变量中获取操作

我很想知道为什么 Mule 将 SoapAction 作为双引号字符串返回

SOAPAction 标头根据规范引用:http ://www.w3.org/TR/soap11/#_Toc478383528

所以你的表达应该是:

<when expression="#[message.inboundProperties['SOAPAction'] == '&quote;submitOrderStatus&quote;']">
于 2013-01-04T20:26:32.503 回答