Author: sagara Date: Tue May 10 14:59:47 2011 New Revision: 1101493 URL: http://svn.apache.org/viewvc?rev=1101493&view=rev Log: Applied fixed for AXIS2-4991
Modified: axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalResponder.java axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportReceiver.java axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportSender.java Modified: axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalResponder.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalResponder.java?rev=1101493&r1=1101492&r2=1101493&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalResponder.java (original) +++ axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalResponder.java Tue May 10 14:59:47 2011 @@ -20,32 +20,40 @@ package org.apache.axis2.transport.local; +import org.apache.axiom.om.OMXMLParserWrapper; +import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axis2.AxisFault; +import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.addressing.RelatesTo; +import org.apache.axis2.builder.BuilderUtil; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.context.MessageContext; import org.apache.axis2.description.TransportOutDescription; +import org.apache.axis2.description.WSDL2Constants; +import org.apache.axis2.engine.AxisEngine; import org.apache.axis2.handlers.AbstractHandler; import org.apache.axis2.transport.TransportSender; import org.apache.axis2.transport.TransportUtils; +import org.apache.axis2.wsdl.WSDLConstants; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.io.ByteArrayOutputStream; -import java.io.OutputStream; +import javax.xml.stream.XMLStreamException; +import java.io.*; +import java.util.Map; /** * LocalResponder */ public class LocalResponder extends AbstractHandler implements TransportSender { protected static final Log log = LogFactory.getLog(LocalResponder.class); - - + // fixed for Executing LocalTransport in MulthThread. private OutputStream out; public LocalResponder(OutputStream response) { - this.out = response; + this.out = response; } public void init(ConfigurationContext confContext, TransportOutDescription transportOut) @@ -87,13 +95,38 @@ public class LocalResponder extends Abst TransportUtils.writeMessage(msgContext, out); } } else { - out = (OutputStream) msgContext.getProperty(MessageContext.TRANSPORT_OUT); + if (/*(msgContext != null) &&*/ (msgContext.getOperationContext() != null) && + (msgContext.getOperationContext().getMessageContexts() != null)) { + MessageContext proxyInMessageContext = msgContext. + getOperationContext().getMessageContext(WSDL2Constants.MESSAGE_LABEL_IN); + + if (proxyInMessageContext != null) { + MessageContext initialMessageContext = (MessageContext) proxyInMessageContext. + getProperty(LocalTransportReceiver.IN_MESSAGE_CONTEXT); + + if (initialMessageContext != null) { + handleResponse(msgContext, initialMessageContext); + } else { + out = (OutputStream) msgContext.getProperty(MessageContext.TRANSPORT_OUT); + + if (out != null) { + TransportUtils.writeMessage(msgContext, out); + } else { + throw new AxisFault( + "Both the TO and Property MessageContext.TRANSPORT_OUT is Null, No where to send"); + } - if (out != null) { - TransportUtils.writeMessage(msgContext, out); + } + } } else { - throw new AxisFault( - "Both the TO and Property MessageContext.TRANSPORT_OUT is Null, No where to send"); + out = (OutputStream) msgContext.getProperty(MessageContext.TRANSPORT_OUT); + + if (out != null) { + TransportUtils.writeMessage(msgContext, out); + } else { + throw new AxisFault( + "Both the TO and Property MessageContext.TRANSPORT_OUT is Null, No where to send"); + } } } } catch (AxisFault axisFault) { @@ -103,7 +136,95 @@ public class LocalResponder extends Abst } TransportUtils.setResponseWritten(msgContext, true); - + return InvocationResponse.CONTINUE; } + + /** + * Retrieves the properties from the proxyOutMessageContext and sets the values to the + * inMessageContext. + * + * @param proxyOutMessageContext the active message context + * @param initialMessageContext the initial message context, which was stored as a property + * in the proxyOutMessageContext + * @throws AxisFault AxisFault + */ + private void handleResponse(MessageContext proxyOutMessageContext, MessageContext initialMessageContext) throws AxisFault { + MessageContext inMessageContext = initialMessageContext.getOperationContext(). + getMessageContext(WSDL2Constants.MESSAGE_LABEL_IN); + + // setting the properties + Map<String, Object> initialPropertyMap = initialMessageContext.getProperties(); + initialMessageContext.setProperties(initialPropertyMap); + + inMessageContext.setEnvelope(getEnvelope(proxyOutMessageContext)); + inMessageContext.setAxisServiceGroup(initialMessageContext.getAxisServiceGroup()); + inMessageContext.setAxisService(initialMessageContext.getAxisService()); + inMessageContext.setAxisOperation(initialMessageContext.getAxisOperation()); + inMessageContext.setAxisMessage(initialMessageContext.getAxisOperation().getMessage( + WSDLConstants.MESSAGE_LABEL_OUT_VALUE)); + inMessageContext.setIncomingTransportName(Constants.TRANSPORT_LOCAL); + inMessageContext.setServiceContext(initialMessageContext.getServiceContext()); + + // set properties on response + inMessageContext.setServerSide(true); + inMessageContext.setProperty(MessageContext.TRANSPORT_OUT, + initialMessageContext.getProperty(MessageContext.TRANSPORT_OUT)); + inMessageContext.setProperty(Constants.OUT_TRANSPORT_INFO, + initialMessageContext.getProperty(Constants.OUT_TRANSPORT_INFO)); + inMessageContext.setTransportIn(initialMessageContext.getTransportIn()); + inMessageContext.setTransportOut(initialMessageContext.getTransportOut()); + + if (log.isDebugEnabled()) { + log.debug("Setting AxisServiceGroup - " + initialMessageContext.getAxisServiceGroup()); + log.debug("Setting AxisService - " + initialMessageContext.getAxisService()); + log.debug("Setting AxisOperation - " + initialMessageContext.getAxisOperation()); + log.debug("Setting AxisMessage - " + initialMessageContext.getAxisOperation(). + getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE)); + log.debug("Setting Incoming Transport name - " + Constants.TRANSPORT_LOCAL); + log.debug("Setting Service Context " + initialMessageContext.getServiceGroupContext().toString()); + + log.debug("Setting ServerSide to true"); + log.debug("Setting " + MessageContext.TRANSPORT_OUT + " property to " + + initialMessageContext.getProperty(MessageContext.TRANSPORT_OUT)); + log.debug("Setting " + Constants.OUT_TRANSPORT_INFO + " property to " + + initialMessageContext.getProperty(Constants.OUT_TRANSPORT_INFO)); + log.debug("Setting TransportIn - " + initialMessageContext.getTransportIn()); + log.debug("Setting TransportOut - " + initialMessageContext.getTransportOut()); + + log.debug("Setting ReplyTo - " + initialMessageContext.getReplyTo()); + log.debug("Setting FaultTo - " + initialMessageContext.getFaultTo()); + } + + // copy the message type property that is used by the out message to the response message + inMessageContext.setProperty(Constants.Configuration.MESSAGE_TYPE, + initialMessageContext.getProperty(Constants.Configuration.MESSAGE_TYPE)); + + if (initialMessageContext.getMessageID() != null) { + inMessageContext.setRelationships( + new RelatesTo[]{new RelatesTo(initialMessageContext.getMessageID())}); + } + + inMessageContext.setReplyTo(initialMessageContext.getReplyTo()); + inMessageContext.setFaultTo(initialMessageContext.getFaultTo()); + + AxisEngine.receive(inMessageContext); + } + + private SOAPEnvelope getEnvelope(MessageContext messageContext) throws AxisFault { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + TransportUtils.writeMessage(messageContext, out); + + ByteArrayInputStream bs = new ByteArrayInputStream(out.toByteArray()); + InputStreamReader streamReader = new InputStreamReader(bs); + OMXMLParserWrapper builder; + + try { + builder = BuilderUtil.getBuilder(streamReader); + } catch (XMLStreamException e) { + throw AxisFault.makeFault(e); + } + + return (SOAPEnvelope) builder.getDocumentElement(); + } } Modified: axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportReceiver.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportReceiver.java?rev=1101493&r1=1101492&r2=1101493&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportReceiver.java (original) +++ axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportReceiver.java Tue May 10 14:59:47 2011 @@ -35,6 +35,8 @@ import org.apache.axis2.engine.AxisEngin import org.apache.axis2.transport.TransportListener; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.axis2.util.MessageContextBuilder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.xml.stream.XMLStreamException; import java.io.InputStream; @@ -42,9 +44,14 @@ import java.io.InputStreamReader; import java.io.OutputStream; public class LocalTransportReceiver { + protected static final Log log = LogFactory.getLog(LocalTransportReceiver.class); public static ConfigurationContext CONFIG_CONTEXT; private ConfigurationContext confContext; private MessageContext inMessageContext; + /** Whether the call is blocking or non-blocking */ + private boolean nonBlocking = false; + /** If the call is non-blocking the in message context will be stored in this property */ + public static final String IN_MESSAGE_CONTEXT = "IN_MESSAGE_CONTEXT"; public LocalTransportReceiver(ConfigurationContext configContext) { confContext = configContext; @@ -54,6 +61,11 @@ public class LocalTransportReceiver { this(CONFIG_CONTEXT); } + public LocalTransportReceiver(LocalTransportSender sender, boolean nonBlocking) { + this(CONFIG_CONTEXT); + this.nonBlocking = nonBlocking; + } + public void processMessage(MessageContext inMessageContext, InputStream in, OutputStream response) throws AxisFault { @@ -81,12 +93,27 @@ public class LocalTransportReceiver { OutputStream response) throws AxisFault { MessageContext msgCtx = confContext.createMessageContext(); + + if (this.nonBlocking) { + if (log.isDebugEnabled()) { + log.debug("Setting the in-message context as a property(" + IN_MESSAGE_CONTEXT + + ") to the current message context"); + } + // Set the in-message context as a property to the current message context. + msgCtx.setProperty(IN_MESSAGE_CONTEXT, inMessageContext); + } + if (inMessageContext != null) { + if (log.isDebugEnabled()) { + log.debug("Setting the property " + HTTPConstants.MC_HTTP_SERVLETREQUEST + " to " + + inMessageContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST)); + log.debug("Setting the property " + MessageContext.REMOTE_ADDR + " to " + + inMessageContext.getProperty(MessageContext.REMOTE_ADDR)); + } msgCtx.setProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST, inMessageContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST)); msgCtx.setProperty(MessageContext.REMOTE_ADDR, inMessageContext.getProperty(MessageContext.REMOTE_ADDR)); - } TransportInDescription tIn = confContext.getAxisConfiguration().getTransportIn( @@ -126,6 +153,15 @@ public class LocalTransportReceiver { msgCtx.setEnvelope(envelope); + if (log.isDebugEnabled()) { + log.debug("Setting incoming Transport name - " + Constants.TRANSPORT_LOCAL); + log.debug("Setting TransportIn - " + tIn); + log.debug("Setting TransportOut - " + localTransportResOut); + log.debug("Setting To address - " + to); + log.debug("Setting WSAction - " + action); + log.debug("Setting Envelope - " + envelope.toString()); + } + AxisEngine.receive(msgCtx); } catch (AxisFault e) { // write the fault back. @@ -135,6 +171,10 @@ public class LocalTransportReceiver { faultContext.setTransportOut(localTransportResOut); faultContext.setProperty(MessageContext.TRANSPORT_OUT, response); + if(log.isDebugEnabled()) { + log.debug("Setting FaultContext's TransportOut - " + localTransportResOut); + } + AxisEngine.sendFault(faultContext); } catch (AxisFault axisFault) { // can't handle this, so just throw it Modified: axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportSender.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportSender.java?rev=1101493&r1=1101492&r2=1101493&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportSender.java (original) +++ axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local/LocalTransportSender.java Tue May 10 14:59:47 2011 @@ -98,7 +98,7 @@ public class LocalTransportSender extend InputStream in = new ByteArrayInputStream(out.toByteArray()); ByteArrayOutputStream response = new ByteArrayOutputStream(); - LocalTransportReceiver localTransportReceiver = new LocalTransportReceiver(this); + LocalTransportReceiver localTransportReceiver = new LocalTransportReceiver(this, isNonBlocking()); localTransportReceiver.processMessage(msgContext, in, response); in.close(); @@ -111,4 +111,11 @@ public class LocalTransportSender extend throw AxisFault.makeFault(e); } } + + protected boolean isNonBlocking() { + if (log.isDebugEnabled()) { + log.debug("Local Transport Sender Selected"); + } + return false; + } }