// client. Should / would be ignored by any transport other than
// nhttp. For example, JMS would not send a reply message for one-way
// operations.
MessageContext outMsgCtx =
(MessageContext) context.getAttribute(OUTGOING_MESSAGE_CONTEXT);
MessageReceiver mr = outMsgCtx.getAxisOperation().getMessageReceiver();
// the following check is to support the dual channel invocation. Hence the
// response will be sent as a new request to the client over a different channel
// client sends back a 202 Accepted response to synapse and we need to neglect that
// 202 Accepted message
if (!outMsgCtx.isPropertyTrue(NhttpConstants.IGNORE_SC_ACCEPTED)) {
try {
MessageContext responseMsgCtx = outMsgCtx.getOperationContext().
getMessageContext(WSDL2Constants.MESSAGE_LABEL_IN);
if (responseMsgCtx == null ||
outMsgCtx.getOptions().isUseSeparateListener() ||
outMsgCtx.getOperationContext().isComplete()) {
if (responseMsgCtx != null &&
responseMsgCtx.getProperty("synapse.send") == null) {
return;
}
} else if (responseMsgCtx == null ||
outMsgCtx.getOptions().isUseSeparateListener()) {
// Since we need to notify the SynapseCallback receiver to remove the
// call backs registered we set a custom property
setHeaders(context, response, outMsgCtx, responseMsgCtx);
outMsgCtx.setProperty(NhttpConstants.HTTP_202_RECEIVED, "true");
mr.receive(outMsgCtx);
return;
}
if (responseMsgCtx == null) {
return;
}
setHeaders(context, response, outMsgCtx, responseMsgCtx);
responseMsgCtx.setServerSide(true);
responseMsgCtx.setDoingREST(outMsgCtx.isDoingREST());
responseMsgCtx.setProperty(MessageContext.TRANSPORT_IN,
outMsgCtx.getProperty(MessageContext.TRANSPORT_IN));
responseMsgCtx.setTransportIn(outMsgCtx.getTransportIn());
responseMsgCtx.setTransportOut(outMsgCtx.getTransportOut());
responseMsgCtx.setAxisMessage(outMsgCtx.getAxisOperation().
getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE));
responseMsgCtx.setOperationContext(outMsgCtx.getOperationContext());
responseMsgCtx.setConfigurationContext(outMsgCtx.getConfigurationContext());
responseMsgCtx.setTo(null);
if (!outMsgCtx.isDoingREST() && !outMsgCtx.isSOAP11()) {
responseMsgCtx.setEnvelope(OMAbstractFactory.getSOAP12Factory().getDefaultEnvelope());
} else {
responseMsgCtx.setEnvelope(OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope());
}
responseMsgCtx.setProperty(AddressingConstants.
DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
responseMsgCtx.setProperty(NhttpConstants.SC_ACCEPTED, Boolean.TRUE);
mr.receive(responseMsgCtx);
} catch (org.apache.axis2.AxisFault af) {
log.debug("Unable to report back " +
"202 Accepted state to the message receiver");
}