如何从AxisEngine获得真实结果

时间:2014-03-12 08:32:38

标签: axis2 wso2esb synapse

我正在尝试基于某些专有的二进制协议为WSO2 ESB实现我的特定传输。从协议规范我需要确认我收到的每个数据包只有在我100%确定它将来会被处理的时候。出于这些原因,必须使用一些持久存储。

我希望通过WSO2 ESB序列实现协议逻辑,该序列获取协议数据包/消息并将它们存储到临时messageStore中,该临时messageStore用作生产者/消费者模式中的队列(其中生产者是传输本身,而消费者是我的包处理器)。

在向客户端发送确认之前,我必须确保我的数据包到达AxisEngine.receive()。但是,即使消息存储不可用,<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> 也总会返回CONTINUE。

代理的配置是:

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);
}

我在传输中使用的代码是:

{{1}}

我想要的行为是我在HTTP传输中看到的:来自客户端的HTTP请求(SOAP UI)被转换为Axis2 MessageContext并传递给MyProxyService。如果一切正常 - 我得到积极的回应,否则 - 错误代码和SOAP错误。

1 个答案:

答案 0 :(得分:0)

经过进一步调查后,我可以说HTTP传输请求/响应背后的想法是,为了发送响应,使用了HttpSender而不是HttpReceiverHttpReceiver从HTTP连接获取请求,设置到消息上下文的HTTP连接的链接,使用AxisEngine.receive()将消息传递给ESB并返回。

HTTP响应本身通过HttpSender接收,标识为对先前请求的响应(通过空 To 标头)并发送到从消息上下文引用的连接。