Search in sources :

Example 1 with OperationContext

use of org.apache.axis2.context.OperationContext in project wso2-axis2-transports by wso2.

the class SynchronousCallback method setInMessageContext.

public synchronized void setInMessageContext(MessageContext inMessageContext) throws AxisFault {
    // thread should have activate by the first message.
    if (!isComplete) {
        // this code is invoked only if the code use with axis2 at the client side
        // when axis2 client receive messages it waits in the sending thread until the response comes.
        // so this thread only notify the waiting thread and hence we need to build the message here.
        inMessageContext.getEnvelope().build();
        OperationContext operationContext = outMessageContext.getOperationContext();
        MessageContext msgCtx = operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
        if (msgCtx == null) {
            // try to see whether there is a piggy back message context
            if (outMessageContext.getProperty(org.apache.axis2.Constants.PIGGYBACK_MESSAGE) != null) {
                msgCtx = (MessageContext) outMessageContext.getProperty(org.apache.axis2.Constants.PIGGYBACK_MESSAGE);
                msgCtx.setTransportIn(inMessageContext.getTransportIn());
                msgCtx.setTransportOut(inMessageContext.getTransportOut());
                msgCtx.setServerSide(false);
                msgCtx.setProperty(BaseConstants.MAIL_CONTENT_TYPE, inMessageContext.getProperty(BaseConstants.MAIL_CONTENT_TYPE));
                // FIXME: this class must not be transport dependent since it is used by AbstractTransportListener
                msgCtx.setIncomingTransportName(org.apache.axis2.Constants.TRANSPORT_MAIL);
                msgCtx.setEnvelope(inMessageContext.getEnvelope());
            } else {
                inMessageContext.setOperationContext(operationContext);
                inMessageContext.setServiceContext(outMessageContext.getServiceContext());
                if (!operationContext.isComplete()) {
                    operationContext.addMessageContext(inMessageContext);
                }
                AxisOperation axisOp = operationContext.getAxisOperation();
                AxisMessage inMessage = axisOp.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
                inMessageContext.setAxisMessage(inMessage);
                inMessageContext.setServerSide(false);
            }
        } else {
            msgCtx.setOperationContext(operationContext);
            msgCtx.setServiceContext(outMessageContext.getServiceContext());
            AxisOperation axisOp = operationContext.getAxisOperation();
            AxisMessage inMessage = axisOp.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
            msgCtx.setAxisMessage(inMessage);
            msgCtx.setTransportIn(inMessageContext.getTransportIn());
            msgCtx.setTransportOut(inMessageContext.getTransportOut());
            msgCtx.setServerSide(false);
            msgCtx.setProperty(BaseConstants.MAIL_CONTENT_TYPE, inMessageContext.getProperty(BaseConstants.MAIL_CONTENT_TYPE));
            // FIXME: this class must not be transport dependent since it is used by AbstractTransportListener
            msgCtx.setIncomingTransportName(org.apache.axis2.Constants.TRANSPORT_MAIL);
            msgCtx.setEnvelope(inMessageContext.getEnvelope());
        }
        this.inMessageContext = inMessageContext;
        isComplete = true;
        this.notifyAll();
    }
}
Also used : OperationContext(org.apache.axis2.context.OperationContext) AxisOperation(org.apache.axis2.description.AxisOperation) MessageContext(org.apache.axis2.context.MessageContext) AxisMessage(org.apache.axis2.description.AxisMessage)

Aggregations

MessageContext (org.apache.axis2.context.MessageContext)1 OperationContext (org.apache.axis2.context.OperationContext)1 AxisMessage (org.apache.axis2.description.AxisMessage)1 AxisOperation (org.apache.axis2.description.AxisOperation)1