我正在嘗試基於一些專有的二進制協議來實現WSO2 ESB的特定傳輸。根據協議規範,只有在我確信將來會處理的情況下,我才需要確認收到的每個數據包。由於這些原因,必須使用一些持久性商店。如何從AxisEngine獲得實際結果
我想要實現經由獲取其被用作在生產隊列協議分組/消息並且將它們存儲到臨時messageStore
WSO2 ESB序列協議邏輯/消費者模式(其中生產者傳送本身和消費者是我的數據包處理器)。
在向客戶端發送確認之前,我必須確定我的數據包已到達messageStore
。但AxisEngine.receive()
確實總是返回CONTINUE,即使消息存儲不可用。
代理的配置是:
<proxy name="MyProxyService">
<target>
<inSequence>
<store messageStore="MyStore" sequence="onStoreSequence"/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence>
<makefault version="soap11" response="true">
<code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
<reason expression="get-property('ERROR_MESSAGE')"/>
</makefault>
<send/>
</faultSequence>
</target>
</proxy>
我在運輸使用的代碼是:
MessageContext msgContext = confContext.createMessageContext();
AxisConfiguration axisConf = confContext.getAxisConfiguration();
try {
msgContext.setTransportIn(axisConf.getTransportIn(transportName));
msgContext.setTransportOut(axisConf.getTransportOut(transportName));
msgContext.setIncomingTransportName(Constants.TRANSPORT_LOCAL);
msgContext.setAxisService(axisConf.getService("MyProxyService"));
msgContext.setEnvelope(TransportUtils.createSOAPMessage(msgContext));
msgContext.setServerSide(true);
Handler.InvocationResponse response = AxisEngine.receive(msgContext);
log.error(String.valueOf(response));
} catch (Exception e) {
log.error("ERROR", e);
}
我想要的行爲是什麼,我在HTTP傳輸見:HTTP請求從客戶端(SOAP UI)被轉換爲Axis2 MessageContext並傳遞給MyProxyService。如果一切正常 - 我會得到積極的迴應,否則 - 錯誤代碼和SOAP錯誤。