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


Reply via email to