You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2008/03/12 16:38:08 UTC

svn commit: r636372 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local: LocalResponder.java LocalResponseTransportOutDescription.java LocalTransportReceiver.java LocalTransportSender.java

Author: dims
Date: Wed Mar 12 08:38:05 2008
New Revision: 636372

URL: http://svn.apache.org/viewvc?rev=636372&view=rev
Log:
Fix for AXIS2-3584 - LocalTransportSender can be used on multithread.

Added:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponseTransportOutDescription.java
Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java?rev=636372&r1=636371&r2=636372&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponder.java Wed Mar 12 08:38:05 2008
@@ -42,10 +42,12 @@
 public class LocalResponder extends AbstractHandler implements TransportSender {
     protected static final Log log = LogFactory.getLog(LocalResponder.class);
     
-    LocalTransportSender sender;
+    
+    //  fixed for Executing LocalTransport in MulthThread. 
+    private OutputStream out;
 
-    public LocalResponder(LocalTransportSender sender) {
-        this.sender = sender;
+    public LocalResponder(OutputStream response) {
+        this.out = response;        
     }
 
     public void init(ConfigurationContext confContext, TransportOutDescription transportOut)
@@ -71,7 +73,6 @@
         msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
         msgContext.setDoingSwA(HTTPTransportUtils.doWriteSwA(msgContext));
 
-        OutputStream out;
         EndpointReference epr = null;
 
         if (msgContext.getTo() != null && !msgContext.getTo().hasAnonymousAddress()) {
@@ -87,7 +88,6 @@
 
             if (epr != null) {
                 if (!epr.hasNoneAddress()) {
-                    out = sender.getResponse();
                     TransportUtils.writeMessage(msgContext, out);
                 }
             } else {

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponseTransportOutDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponseTransportOutDescription.java?rev=636372&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponseTransportOutDescription.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalResponseTransportOutDescription.java Wed Mar 12 08:38:05 2008
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transport.local;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.description.Flow;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.engine.Phase;
+import org.apache.axis2.transport.TransportSender;
+import java.util.ArrayList;
+
+/**
+ * This is wrapper class of TransportOutDescription class.
+ * In Using Axis2 Local Transport, you can't send SOAP Message successively.
+ */
+
+class LocalResponseTransportOutDescription extends TransportOutDescription {
+
+    private TransportSender sender = null;
+
+    private TransportOutDescription tOut = null;
+
+    public LocalResponseTransportOutDescription(
+            TransportOutDescription localTransportSenderDescription)
+            throws AxisFault {
+
+        super(localTransportSenderDescription.getName());
+
+        this.tOut = localTransportSenderDescription;
+    }
+
+    /**
+     * Method addParameter.
+     * 
+     * @param param
+     */
+    public void addParameter(Parameter param) throws AxisFault {
+        tOut.addParameter(param);
+    }
+
+    public void removeParameter(Parameter param) throws AxisFault {
+        tOut.removeParameter(param);
+    }
+
+    public void deserializeParameters(OMElement parameterElement)
+            throws AxisFault {
+        tOut.deserializeParameters(parameterElement);
+    }
+
+    public Flow getFaultFlow() {
+        return tOut.getFaultFlow();
+    }
+
+    public Phase getFaultPhase() {
+        return tOut.getFaultPhase();
+    }
+
+    /**
+     * @return Returns String.
+     */
+    public String getName() {
+        return tOut.getName();
+    }
+
+    public Flow getOutFlow() {
+        return tOut.getOutFlow();
+    }
+
+    public Phase getOutPhase() {
+        return tOut.getOutPhase();
+    }
+
+    /**
+     * Method getParameter.
+     * 
+     * @param name
+     * @return Returns Parameter.
+     */
+    public Parameter getParameter(String name) {
+        return tOut.getParameter(name);
+    }
+
+    public ArrayList getParameters() {
+        return tOut.getParameters();
+    }
+
+    /**
+     * @return Returns TransportSender.
+     */
+    public TransportSender getSender() {
+        return this.sender;
+    }
+
+    // to check whether the parameter is locked at any level
+    public boolean isParameterLocked(String parameterName) {
+        return tOut.isParameterLocked(parameterName);
+    }
+
+    public void setFaultFlow(Flow faultFlow) {
+        tOut.setFaultFlow(faultFlow);
+    }
+
+    public void setFaultPhase(Phase faultPhase) {
+        tOut.setFaultPhase(faultPhase);
+    }
+
+    /**
+     * @param name
+     */
+    public void setName(String name) {
+        tOut.setName(name);
+    }
+
+    public void setOutFlow(Flow outFlow) {
+        tOut.setOutFlow(outFlow);
+    }
+
+    public void setOutPhase(Phase outPhase) {
+        tOut.setOutPhase(outPhase);
+    }
+
+    /**
+     * @param sender
+     */
+    public void setSender(TransportSender sender) {
+        this.sender = sender;
+    }
+}

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java?rev=636372&r1=636371&r2=636372&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java Wed Mar 12 08:38:05 2008
@@ -38,11 +38,11 @@
 import javax.xml.stream.XMLStreamException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 
 public class LocalTransportReceiver {
     public static ConfigurationContext CONFIG_CONTEXT;
     private ConfigurationContext confContext;
-    private LocalTransportSender sender;
 
     public LocalTransportReceiver(ConfigurationContext configContext) {
         confContext = configContext;
@@ -50,23 +50,26 @@
 
     public LocalTransportReceiver(LocalTransportSender sender) {
         this(CONFIG_CONTEXT);
-        this.sender = sender;
     }
 
-    public void processMessage(InputStream in, EndpointReference to, String action)
+    public void processMessage(InputStream in, EndpointReference to, String action, OutputStream response)
             throws AxisFault {
         MessageContext msgCtx = confContext.createMessageContext();
         TransportInDescription tIn = confContext.getAxisConfiguration().getTransportIn(
                 Constants.TRANSPORT_LOCAL);
         TransportOutDescription tOut = confContext.getAxisConfiguration().getTransportOut(
                 Constants.TRANSPORT_LOCAL);
+                
+        // CAUTION : When using Local Transport of Axis2,  class LocalTransportReceiver changed the name of LocalTransportSender's class in configContext.
+        // We escaped this problem by the following code.
+        LocalResponseTransportOutDescription localTransportResOut = new LocalResponseTransportOutDescription(
+                tOut);
+        localTransportResOut.setSender(new LocalResponder(response));
+        
         try {
-
-            tOut.setSender(new LocalResponder(sender));
-
             msgCtx.setTransportIn(tIn);
-            msgCtx.setTransportOut(tOut);
-            msgCtx.setProperty(MessageContext.TRANSPORT_OUT, sender.getResponse());
+            msgCtx.setTransportOut(localTransportResOut);
+            msgCtx.setProperty(MessageContext.TRANSPORT_OUT, response);
 
             msgCtx.setTo(to);
             msgCtx.setWSAAction(action);
@@ -89,9 +92,8 @@
             try {
                 MessageContext faultContext =
                         MessageContextBuilder.createFaultMessageContext(msgCtx, e);
-                
-                faultContext.setTransportOut(tOut);
-                faultContext.setProperty(MessageContext.TRANSPORT_OUT, sender.getResponse());
+                faultContext.setTransportOut(localTransportResOut);
+                faultContext.setProperty(MessageContext.TRANSPORT_OUT, response);
 
                 AxisEngine.sendFault(faultContext);
             } catch (AxisFault axisFault) {

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java?rev=636372&r1=636371&r2=636372&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java Wed Mar 12 08:38:05 2008
@@ -42,8 +42,6 @@
 public class LocalTransportSender extends AbstractHandler implements TransportSender {
     protected static final Log log = LogFactory.getLog(LocalTransportSender.class);
 
-    private ByteArrayOutputStream response;
-
     public void init(ConfigurationContext confContext, TransportOutDescription transportOut)
             throws AxisFault {
     }
@@ -54,10 +52,6 @@
     public void cleanup(MessageContext msgContext) throws AxisFault {
     }
 
-    protected OutputStream getResponse() {
-        return response;
-    }
-
     /**
      * Method invoke
      *
@@ -106,10 +100,10 @@
             throws AxisFault {
         try {
             InputStream in = new ByteArrayInputStream(out.toByteArray());
-            response = new ByteArrayOutputStream();
+            ByteArrayOutputStream response = new ByteArrayOutputStream();
 
             LocalTransportReceiver localTransportReceiver = new LocalTransportReceiver(this);
-            localTransportReceiver.processMessage(in, msgContext.getTo(), msgContext.getOptions().getAction());
+            localTransportReceiver.processMessage(in, msgContext.getTo(), msgContext.getOptions().getAction(), response);
             in.close();
             out.close();
             in = new ByteArrayInputStream(response.toByteArray());



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org