2014-03-12 133 views
0

我正在嘗試基於一些專有的二進制協議來實現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錯誤。

回答

0

經過額外的調查,我可以說HTTP傳輸請求/響應背後的想法是發送響應HttpSender而不是HttpReceiver被使用。 HttpReceiver從HTTP連接獲取請求,將鏈接設置爲HTTP連接到消息上下文,使用AxisEngine.receive()將消息傳遞給ESB並返回。

HTTP響應本身經由HttpSender接收,確定爲響應於先前的請求(通過空報頭)併發送到從消息上下文引用的連接。