public static MessageContext createNewRelatedMessageContext(RMMsgContext referenceRMMessage, AxisOperation operation)
throws SandeshaException {
try {
MessageContext referenceMessage = referenceRMMessage.getMessageContext();
ConfigurationContext configContext = referenceMessage.getConfigurationContext();
AxisConfiguration axisConfiguration = configContext.getAxisConfiguration();
MessageContext newMessageContext = new MessageContext();
newMessageContext.setConfigurationContext(configContext);
Options newOptions = new Options ();
Options oldOptions = referenceMessage.getOptions();
newMessageContext.setOptions(newOptions);
if (referenceMessage.getAxisServiceGroup() != null) {
newMessageContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
if (referenceMessage.getServiceGroupContext()!=null) {
newMessageContext.setServiceGroupContext(referenceMessage.getServiceGroupContext());
newMessageContext.setServiceGroupContextId(referenceMessage.getServiceGroupContextId());
} else {
ServiceGroupContext serviceGroupContext = new ServiceGroupContext (
configContext,referenceMessage.getAxisServiceGroup());
newMessageContext.setServiceGroupContext(serviceGroupContext);
}
} else {
AxisServiceGroup axisServiceGroup = new AxisServiceGroup(axisConfiguration);
ServiceGroupContext serviceGroupContext = new ServiceGroupContext(configContext, axisServiceGroup);
newMessageContext.setAxisServiceGroup(axisServiceGroup);
newMessageContext.setServiceGroupContext(serviceGroupContext);
}
if (referenceMessage.getAxisService() != null) {
newMessageContext.setAxisService(referenceMessage.getAxisService());
if (referenceMessage.getServiceContext()!=null) {
newMessageContext.setServiceContext(referenceMessage.getServiceContext());
newMessageContext.setServiceContextID(referenceMessage.getServiceContextID());
} else {
ServiceContext serviceContext = new ServiceContext (referenceMessage.getAxisService(),newMessageContext.getServiceGroupContext());
newMessageContext.setServiceContext(serviceContext);
}
}
newMessageContext.setAxisOperation(operation);
//The message created will basically be used as a outMessage, so setting the AxisMessage accordingly
newMessageContext.setAxisMessage(operation.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE));
OperationContext operationContext = new OperationContext(operation, newMessageContext.getServiceContext());
newMessageContext.setOperationContext(operationContext);
operationContext.addMessageContext(newMessageContext);
// adding a blank envelope
SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil.getSOAPVersion(referenceMessage
.getEnvelope()));
newMessageContext.setEnvelope(factory.getDefaultEnvelope());
newMessageContext.setTransportIn(referenceMessage.getTransportIn());
newMessageContext.setTransportOut(referenceMessage.getTransportOut());
// copying transport info.
newMessageContext.setProperty(MessageContext.TRANSPORT_OUT, referenceMessage
.getProperty(MessageContext.TRANSPORT_OUT));
newMessageContext.setProperty(Constants.OUT_TRANSPORT_INFO, referenceMessage
.getProperty(Constants.OUT_TRANSPORT_INFO));
newMessageContext.setProperty(MessageContext.TRANSPORT_HEADERS, referenceMessage
.getProperty(MessageContext.TRANSPORT_HEADERS));
newMessageContext.setProperty(MessageContext.TRANSPORT_IN, referenceMessage
.getProperty(MessageContext.TRANSPORT_IN));
newMessageContext.setProperty(MessageContext.TRANSPORT_OUT, referenceMessage
.getProperty(MessageContext.TRANSPORT_OUT));
newMessageContext.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
referenceMessage.getProperty(AddressingConstants.WS_ADDRESSING_VERSION));
copyConfiguredProperties (referenceMessage,newMessageContext);
//copying the serverSide property
newMessageContext.setServerSide(referenceMessage.isServerSide());
//this had to be set here to avoid a double invocation.
if (oldOptions!=null)
newOptions.setUseSeparateListener(oldOptions.isUseSeparateListener());