in modules/core/src/main/java/org/apache/sandesha2/util/SandeshaUtil.java [375:478]
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 oldOptions = referenceMessage.getOptions();
Options newOptions = new Options ();
newOptions.setProperties(oldOptions.getProperties());
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 {
ServiceGroupContext sgc = newMessageContext.getServiceGroupContext();
ServiceContext serviceContext = sgc.getServiceContext(referenceMessage.getAxisService());
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 = OperationContextFactory.createOperationContext(operation.getAxisSpecificMEPConstant(), operation, newMessageContext.getServiceContext());
newMessageContext.setOperationContext(operationContext);
operationContext.addMessageContext(newMessageContext);
// adding a blank envelope
SOAPFactory factory = (SOAPFactory)referenceMessage.getEnvelope().getOMFactory();
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));
newMessageContext.setProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES,
referenceMessage.getProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES));
copyConfiguredProperties (referenceMessage,newMessageContext);
//copying the serverSide property
newMessageContext.setServerSide(referenceMessage.isServerSide());
//this had to be set here to avoid a double invocation.
newOptions.setUseSeparateListener(oldOptions.isUseSeparateListener());
return newMessageContext;
} catch (AxisFault e) {
if (LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())
log.debug(e.getMessage());
throw new SandeshaException(e.getMessage());
}
}