我的任務是根據soapAction將消息路由到不同的jms隊列。我使用的是<cxf:proxy-service>
,所以除了在WSDL中填充soapAction
屬性(除非有人告訴我否則),除此之外基本上沒有其他方法可以找到調用哪個操作。所以這就是我想實現:爲什麼Mule將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>
我很好奇,想知道爲什麼騾子返回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>
感謝David的鏈接。現在有道理。同樣,如果你能解釋使用'#[]'與在表達式中不使用它作爲消息路由器的一部分的區別,將會感激,因爲我在這兩種情況下看到了相同的結果。 –
表達式的規範形式是在它們周圍使用'#[]'。騾有時在某些地方允許你不使用'#[]',但建議始終使用它們來確保結果。 –