You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sa...@apache.org on 2011/05/10 16:59:47 UTC

svn commit: r1101493 - in /axis/axis2/java/core/branches/1_6/modules/transport/local/src/org/apache/axis2/transport/local: LocalResponder.java LocalTransportReceiver.java LocalTransportSender.java

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;
+    }
 }