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 he...@apache.org on 2005/06/28 05:01:39 UTC

svn commit: r202118 - in /webservices/axis/trunk/java/modules/core: src/org/apache/axis/clientapi/ src/org/apache/axis/context/ src/org/apache/axis/receivers/ src/org/apache/axis/transport/ src/org/apache/axis/transport/http/ src/org/apache/axis/transp...

Author: hemapani
Date: Mon Jun 27 20:01:37 2005
New Revision: 202118

URL: http://svn.apache.org/viewcvs?rev=202118&view=rev
Log:
fix a  message in messsage context injection test, integrate the thread pool,cleanup for http transport

Modified:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java
    webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java Mon Jun 27 20:01:37 2005
@@ -18,15 +18,8 @@
 package org.apache.axis.clientapi;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
 
 import javax.xml.namespace.QName;
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
 
 import org.apache.axis.Constants;
 import org.apache.axis.addressing.EndpointReference;
@@ -41,12 +34,9 @@
 import org.apache.axis.engine.AxisEngine;
 import org.apache.axis.engine.AxisFault;
 import org.apache.axis.om.OMException;
-import org.apache.axis.om.impl.llom.builder.StAXBuilder;
-import org.apache.axis.om.impl.llom.OMOutput;
 import org.apache.axis.soap.SOAPEnvelope;
-import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
 import org.apache.axis.transport.TransportListener;
-import org.apache.axis.transport.http.HTTPTransportReceiver;
+import org.apache.axis.util.threadpool.AxisWorker;
 import org.apache.wsdl.WSDLConstants;
 
 /**
@@ -135,8 +125,7 @@
                 }
             }
             if (callback.envelope != null) {
-                MessageContext resMsgctx =
-                    new MessageContext(serviceContext.getEngineContext());
+                MessageContext resMsgctx = new MessageContext(serviceContext.getEngineContext());
                 resMsgctx.setEnvelope(callback.envelope);
                 return resMsgctx;
             } else {
@@ -159,7 +148,6 @@
             msgctx.setOperationContext(
                 OperationContextFactory.createMEPContext(
                     WSDLConstants.MEP_CONSTANT_IN_OUT,
-                    
                     axisop,
                     serviceContext));
             MessageContext response = TwoChannelBasedSender.send(msgctx, listenerTransport);
@@ -193,37 +181,17 @@
                 axisop.setMessageReciever(callbackReceiver);
                 callbackReceiver.addCallback(messageID, callback);
                 msgctx.setReplyTo(
-                ListenerManager.replyToEPR(
+                    ListenerManager.replyToEPR(
                         serviceContext.getServiceConfig().getName().getLocalPart()
                             + "/"
-                            + axisop.getName().getLocalPart(),listenerTransport.getName().getLocalPart()));
-                msgctx.setOperationContext(
-                    axisop.findOperationContext(msgctx, serviceContext));
+                            + axisop.getName().getLocalPart(),
+                        listenerTransport.getName().getLocalPart()));
+                msgctx.setOperationContext(axisop.findOperationContext(msgctx, serviceContext));
                 msgctx.setServiceContext(serviceContext);
                 engine.send(msgctx);
             } else {
-                Thread thread = new Thread(new Runnable() {
-                    public void run() {
-                        try {
-                            msgctx.setOperationContext(
-                                OperationContextFactory.createMEPContext(
-                                    WSDLConstants.MEP_CONSTANT_IN_OUT,
-                                    axisop,
-                                    serviceContext));
-                            msgctx.setServiceContext(serviceContext);
-                            MessageContext response =
-                                TwoChannelBasedSender.send(msgctx, listenerTransport);
-                            SOAPEnvelope resenvelope = response.getEnvelope();
-                            AsyncResult asyncResult = new AsyncResult();
-                            asyncResult.setResult(resenvelope);
-                            callback.onComplete(asyncResult);
-                            callback.setComplete(true);
-                        } catch (AxisFault e) {
-                            callback.reportError(e);
-                        }
-                    }
-                });
-                thread.start();
+                serviceContext.getEngineContext().getThreadPool().addWorker(
+                    new NonBlockingInvocationWorker(callback,axisop,msgctx));
             }
 
             //            //TODO start the server
@@ -319,63 +287,71 @@
             throw new AxisFault("useSeparateListener = false is only supports by the htpp transport set as the sender and receiver");
         }
 
-        this.senderTransport = serviceContext.getEngineContext().getAxisConfiguration().getTransportOut(new QName(senderTransport));
-        this.listenerTransport = serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(new QName(listenerTransport));
+        this.senderTransport =
+            serviceContext.getEngineContext().getAxisConfiguration().getTransportOut(
+                new QName(senderTransport));
+        this.listenerTransport =
+            serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(
+                new QName(listenerTransport));
 
         if (useSeparateListener == true) {
-            if(!serviceContext.getEngineContext().getAxisConfiguration().isEngaged(new QName(Constants.MODULE_ADDRESSING))){
+            if (!serviceContext
+                .getEngineContext()
+                .getAxisConfiguration()
+                .isEngaged(new QName(Constants.MODULE_ADDRESSING))) {
                 throw new AxisFault("to do two Transport Channels the Addressing Modules must be engeged");
             }
             ListenerManager.makeSureStarted(listenerTransport, serviceContext.getEngineContext());
         }
     }
 
-//    private SOAPEnvelope checkReturnChannel(MessageContext response) throws AxisFault {
-//        SOAPEnvelope resenvelope = null;
-//        try {
-//            //TODO Fix this we support only the HTTP Sync cases, so we hardcode this
-//            if (Constants.TRANSPORT_HTTP.equals(listenerTransport)) {
-//                HTTPTransportReceiver receiver = new HTTPTransportReceiver();
-//                resenvelope = receiver.handleHTTPRequest(response, serviceContext.getEngineContext());
-//            } else if (Constants.TRANSPORT_TCP.equals(listenerTransport)) {
-//                InputStream inStream = (InputStream) response.getProperty(MessageContext.TRANSPORT_IN);
-//                response.setProperty(MessageContext.TRANSPORT_IN,null);
-//                Reader in = new InputStreamReader(inStream);
-//
-//                if (in != null) {
-//                    XMLStreamReader xmlreader =
-//                        XMLInputFactory.newInstance().createXMLStreamReader(in);
-//                    StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader);
-//                    resenvelope = (SOAPEnvelope) builder.getDocumentElement();
-//                } else {
-//                    throw new AxisFault(
-//                        "Sync invocation expect a proeprty "
-//                            + MessageContext.TRANSPORT_IN
-//                            + " set ");
-//                }
-//            }
-//        } catch (XMLStreamException e) {
-//            throw new AxisFault(e);
-//        } catch (FactoryConfigurationError e) {
-//            throw new AxisFault(e);
-//        }
-//        return resenvelope;
-//    }
+    //    private SOAPEnvelope checkReturnChannel(MessageContext response) throws AxisFault {
+    //        SOAPEnvelope resenvelope = null;
+    //        try {
+    //            //TODO Fix this we support only the HTTP Sync cases, so we hardcode this
+    //            if (Constants.TRANSPORT_HTTP.equals(listenerTransport)) {
+    //                HTTPTransportReceiver receiver = new HTTPTransportReceiver();
+    //                resenvelope = receiver.handleHTTPRequest(response, serviceContext.getEngineContext());
+    //            } else if (Constants.TRANSPORT_TCP.equals(listenerTransport)) {
+    //                InputStream inStream = (InputStream) response.getProperty(MessageContext.TRANSPORT_IN);
+    //                response.setProperty(MessageContext.TRANSPORT_IN,null);
+    //                Reader in = new InputStreamReader(inStream);
+    //
+    //                if (in != null) {
+    //                    XMLStreamReader xmlreader =
+    //                        XMLInputFactory.newInstance().createXMLStreamReader(in);
+    //                    StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader);
+    //                    resenvelope = (SOAPEnvelope) builder.getDocumentElement();
+    //                } else {
+    //                    throw new AxisFault(
+    //                        "Sync invocation expect a proeprty "
+    //                            + MessageContext.TRANSPORT_IN
+    //                            + " set ");
+    //                }
+    //            }
+    //        } catch (XMLStreamException e) {
+    //            throw new AxisFault(e);
+    //        } catch (FactoryConfigurationError e) {
+    //            throw new AxisFault(e);
+    //        }
+    //        return resenvelope;
+    //    }
 
     private void checkTransport(MessageContext msgctx) throws AxisFault {
         if (senderTransport == null) {
             senderTransport = inferTransport(to);
         }
         if (listenerTransport == null) {
-            listenerTransport =  serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(
-            senderTransport.getName());
+            listenerTransport =
+                serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(
+                    senderTransport.getName());
         }
 
         if (msgctx.getTransportIn() == null) {
-                msgctx.setTransportIn(listenerTransport);
+            msgctx.setTransportIn(listenerTransport);
         }
         if (msgctx.getTransportOut() == null) {
-                msgctx.setTransportOut(senderTransport);
+            msgctx.setTransportOut(senderTransport);
         }
 
     }
@@ -389,18 +365,52 @@
         public void reportError(Exception e) {
             error = e;
         }
-//        public boolean hasResult() {
-//            return envelope != null || error != null;
-//        }
+        //        public boolean hasResult() {
+        //            return envelope != null || error != null;
+        //        }
     }
 
     public void engageModule(QName moduleName) throws AxisFault {
         serviceContext.getEngineContext().getAxisConfiguration().engageModule(moduleName);
     }
-    
-    public void close() throws AxisFault{
+
+    public void close() throws AxisFault {
         //senderTransport.getSender().cleanUp();
         ListenerManager.stop(listenerTransport.getName().getLocalPart());
-     }
+    }
+
+    private class NonBlockingInvocationWorker implements AxisWorker {
 
+        private Callback callback;
+        private OperationDescription axisop;
+        private MessageContext msgctx;
+
+        public NonBlockingInvocationWorker(
+            Callback callback,
+            OperationDescription axisop,
+            MessageContext msgctx) {
+            this.callback = callback;
+            this.axisop = axisop;
+            this.msgctx = msgctx;
+        }
+
+        public void doWork() {
+            try {
+                msgctx.setOperationContext(
+                    OperationContextFactory.createMEPContext(
+                        WSDLConstants.MEP_CONSTANT_IN_OUT,
+                        axisop,
+                        serviceContext));
+                msgctx.setServiceContext(serviceContext);
+                MessageContext response = TwoChannelBasedSender.send(msgctx, listenerTransport);
+                SOAPEnvelope resenvelope = response.getEnvelope();
+                AsyncResult asyncResult = new AsyncResult();
+                asyncResult.setResult(resenvelope);
+                callback.onComplete(asyncResult);
+                callback.setComplete(true);
+            } catch (Exception e) {
+                callback.reportError(e);
+            }
+        }
+    }
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java Mon Jun 27 20:01:37 2005
@@ -27,6 +27,7 @@
 import org.apache.axis.engine.AxisConfiguration;
 import org.apache.axis.engine.AxisFault;
 import org.apache.axis.storage.AxisStorage;
+import org.apache.axis.util.threadpool.ThreadPool;
 
 public class ConfigurationContext extends AbstractContext{
 
@@ -35,6 +36,7 @@
 
     private Map sessionContextMap;
     private Map moduleContextMap;
+    private ThreadPool threadPool;
 
     /**
      * Map containing <code>MessageID</code> to
@@ -117,6 +119,16 @@
         }else{
             throw new AxisFault("Service not found service name = "+serviceName );
         }
+    }
+
+    /**
+     * @return
+     */
+    public ThreadPool getThreadPool() {
+        if(threadPool == null){
+            threadPool = new ThreadPool();
+        }
+        return threadPool;
     }
 
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java Mon Jun 27 20:01:37 2005
@@ -68,28 +68,29 @@
             msgContext.getOperationContext().getServiceContext().getServiceConfig();
 
         Parameter scopeParam = service.getParameter(SCOPE);
-        String scope = Constants.MESSAGE_SCOPE;
         QName serviceName = service.getName();
-        if (Constants.MESSAGE_SCOPE.equals(scope)) {
-            return makeNewServiceObject(msgContext);
-        } else if (Constants.SESSION_SCOPE.equals(scope)) {
+        if (scopeParam != null &&  Constants.SESSION_SCOPE.equals(scopeParam.getValue())) {
             SessionContext sessionContext = msgContext.getSessionContext();
-            Object obj = sessionContext.getProperty(serviceName.getLocalPart());
-            if (obj == null) {
-                obj = makeNewServiceObject(msgContext);
-                sessionContext.setProperty(serviceName.getLocalPart(), obj);
+            synchronized(sessionContext){
+                Object obj = sessionContext.getProperty(serviceName.getLocalPart());
+                if (obj == null) {
+                    obj = makeNewServiceObject(msgContext);
+                    sessionContext.setProperty(serviceName.getLocalPart(), obj);
+                }
+                return obj;
             }
-            return obj;
-        } else if (Constants.APPLICATION_SCOPE.equals(scope)) {
+        } else if (scopeParam != null &&  Constants.APPLICATION_SCOPE.equals(scopeParam.getValue())) {
             SessionContext globalContext = msgContext.getSessionContext();
-            Object obj = globalContext.getProperty(serviceName.getLocalPart());
-            if (obj == null) {
-                obj = makeNewServiceObject(msgContext);
-                globalContext.setProperty(serviceName.getLocalPart(), obj);
+            synchronized(globalContext){
+                Object obj = globalContext.getProperty(serviceName.getLocalPart());
+                if (obj == null) {
+                    obj = makeNewServiceObject(msgContext);
+                    globalContext.setProperty(serviceName.getLocalPart(), obj);
+                }
+                return obj;
             }
-            return obj;
         } else {
-            throw new AxisFault("unknown scope " + scope);
+            return makeNewServiceObject(msgContext);
         }
     }
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java Mon Jun 27 20:01:37 2005
@@ -43,9 +43,11 @@
         return createSOAPMessage(msgContext, inStream);
     }
 
+
+ 
     public static SOAPEnvelope createSOAPMessage(
         MessageContext msgContext,
-        InputStream inStream)
+        InputStream inStream )
         throws AxisFault {
         try {
             //Check for the REST behaviour, if you desire rest beahaviour
@@ -53,9 +55,6 @@
             Object doREST =
                 msgContext.getProperty(Constants.Configuration.DO_REST);
             Reader reader = new InputStreamReader(inStream);
-            
-            char[] chars = new char[1024];
-            int read = 100;
             
             XMLStreamReader xmlreader =
                 XMLInputFactory.newInstance().createXMLStreamReader(reader);

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java Mon Jun 27 20:01:37 2005
@@ -83,12 +83,11 @@
         HttpServletRequest httpServletRequest,
         HttpServletResponse httpServletResponse)
         throws ServletException, IOException {
-
+            httpServletResponse.setContentType("text/xml; charset=utf-8");
         try {
-            
+
             Object sessionContext =
-                httpServletRequest.getSession().getAttribute(
-                    Constants.SESSION_CONTEXT_PROPERTY);
+                httpServletRequest.getSession().getAttribute(Constants.SESSION_CONTEXT_PROPERTY);
             if (sessionContext == null) {
                 sessionContext = new SessionContext(null);
                 httpServletRequest.getSession().setAttribute(
@@ -104,7 +103,7 @@
                 String value = httpServletRequest.getParameter(name);
                 map.put(name, value);
             }
-            
+
             MessageContext msgContext =
                 new MessageContext(
                     configContext,
@@ -115,18 +114,19 @@
                         new QName(Constants.TRANSPORT_HTTP)));
             msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
 
-            
-            boolean processed = HTTPTransportUtils.processHTTPGetRequest(msgContext,
-            httpServletRequest.getInputStream(),
-            httpServletResponse.getOutputStream(),
-            httpServletRequest.getContentType(),
-            httpServletRequest.getHeader(HTTPConstants.HEADER_SOAP_ACTION), 
-            httpServletRequest.getRequestURL().toString(),
-                                               configContext,map);
-
-            
+            boolean processed =
+                HTTPTransportUtils.processHTTPGetRequest(
+                    msgContext,
+                    httpServletRequest.getInputStream(),
+                    httpServletResponse.getOutputStream(),
+                    httpServletRequest.getContentType(),
+                    httpServletRequest.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+                    httpServletRequest.getRequestURL().toString(),
+                    configContext,
+                    map);
+            httpServletResponse.getOutputStream().flush();
             if (!processed) {
-                            lister.handle(httpServletRequest, httpServletResponse);
+                lister.handle(httpServletRequest, httpServletResponse);
             }
         } catch (OMException e) {
             throw new AxisFault(e);
@@ -168,15 +168,16 @@
                         new QName(Constants.TRANSPORT_HTTP)),
                     configContext.getAxisConfiguration().getTransportOut(
                         new QName(Constants.TRANSPORT_HTTP)));
-                        
-            res.setContentType("text/xml; charset=utf-8");             
-            HTTPTransportUtils.processHTTPPostRequest(msgContext,
-                                                req.getInputStream(),
-                                                res.getOutputStream(), 
-                                                req.getContentType(),
-                                                req.getHeader(HTTPConstants.HEADER_SOAP_ACTION), 
-                                                req.getRequestURL().toString(),
-                                                configContext);
+
+            res.setContentType("text/xml; charset=utf-8");
+            HTTPTransportUtils.processHTTPPostRequest(
+                msgContext,
+                req.getInputStream(),
+                res.getOutputStream(),
+                req.getContentType(),
+                req.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+                req.getRequestURL().toString(),
+                configContext);
             Object contextWritten = msgContext.getProperty(Constants.RESPONSE_WRITTEN);
             if (contextWritten == null || !Constants.VALUE_TRUE.equals(contextWritten)) {
                 res.setStatus(HttpServletResponse.SC_ACCEPTED);

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java Mon Jun 27 20:01:37 2005
@@ -17,26 +17,41 @@
  */
 package org.apache.axis.transport.http;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.io.Reader;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.StringTokenizer;
+
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
 
 import org.apache.axis.Constants;
 import org.apache.axis.addressing.AddressingConstants;
 import org.apache.axis.addressing.EndpointReference;
+import org.apache.axis.attachments.MIMEHelper;
 import org.apache.axis.context.ConfigurationContext;
 import org.apache.axis.context.MessageContext;
 import org.apache.axis.engine.AxisEngine;
 import org.apache.axis.engine.AxisFault;
 import org.apache.axis.om.OMElement;
+import org.apache.axis.om.OMException;
 import org.apache.axis.om.OMNamespace;
 import org.apache.axis.om.impl.llom.OMNamespaceImpl;
+import org.apache.axis.om.impl.llom.builder.StAXBuilder;
+import org.apache.axis.om.impl.llom.builder.StAXOMBuilder;
+import org.apache.axis.om.impl.llom.mtom.MTOMStAXSOAPModelBuilder;
 import org.apache.axis.soap.SOAPEnvelope;
 import org.apache.axis.soap.SOAPFactory;
+import org.apache.axis.soap.impl.llom.SOAPProcessingException;
+import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
 import org.apache.axis.soap.impl.llom.soap11.SOAP11Factory;
-import org.apache.axis.transport.TransportUtils;
 import org.apache.axis.util.Utils;
 
 public class HTTPTransportUtils {
@@ -51,33 +66,56 @@
         ConfigurationContext configurationContext)
         throws AxisFault {
 
-        msgContext.setWSAAction(soapAction);
-        msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
-
-        if (Constants.SOAP.MTOM_CONTENT_TYPE.equals(contentType)) {
-            if (Constants
-                .VALUE_TRUE
-                .equals(msgContext.getProperty(Constants.Configuration.ENABLE_MTOM))) {
-                msgContext.setProperty(Constants.Configuration.DO_MTOM, Constants.VALUE_TRUE);
-            } else {
-                throw new AxisFault("MTOTM Not supported");
+        try {
+            msgContext.setWSAAction(soapAction);
+            msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
+            
+            SOAPEnvelope envelope = null;
+            StAXBuilder builder = null;
+            Reader reader = new InputStreamReader(in);
+            XMLStreamReader xmlreader =
+                XMLInputFactory.newInstance().createXMLStreamReader(reader);
+            
+            
+            StringTokenizer st = new StringTokenizer(contentType);
+            
+            String mimetype = null;
+            if (st.hasMoreTokens()){
+                mimetype = st.nextToken();            
             }
-        } else if (Constants.SOAP.SOAP_12_CONTENT_TYPE.equals(contentType)) {
-            //TODO what to do with 1.2 for REST
-        } else if (
-            contentType != null && contentType.indexOf(Constants.SOAP.SOAP_11_CONTENT_TYPE) > -1) {
-            if ((soapAction == null || soapAction.length() == 0)
-                && Constants.VALUE_TRUE.equals(
-                    msgContext.getProperty(Constants.Configuration.ENABLE_REST))) {
-                msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
+            
+            if (HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED.equalsIgnoreCase(mimetype)) {
+                builder = selectBuilderForMIME(msgContext,in,contentType);
+                envelope = (SOAPEnvelope) builder.getDocumentElement();
+            } else if (
+                contentType != null && contentType.indexOf(Constants.SOAP.SOAP_11_CONTENT_TYPE) > -1) {
+                if ((soapAction == null || soapAction.length() == 0)
+                    && Constants.VALUE_TRUE.equals(
+                        msgContext.getProperty(Constants.Configuration.ENABLE_REST))) {
+                    msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
+                    SOAPFactory soapFactory = new SOAP11Factory();
+                    builder = new StAXOMBuilder(xmlreader);
+                    builder.setOmbuilderFactory(soapFactory);
+                    envelope = soapFactory.getDefaultEnvelope();
+                    envelope.getBody().addChild(builder.getDocumentElement());
+                }
             }
-        }
-
-        SOAPEnvelope envelope = TransportUtils.createSOAPMessage(msgContext, in);
-
-        msgContext.setEnvelope(envelope);
-        AxisEngine engine = new AxisEngine(configurationContext);
-        engine.receive(msgContext);
+            
+            if(envelope == null){
+                builder = new StAXSOAPModelBuilder(xmlreader);
+                envelope = (SOAPEnvelope) builder.getDocumentElement();
+            }
+            
+            msgContext.setEnvelope(envelope);
+            AxisEngine engine = new AxisEngine(configurationContext);
+            engine.receive(msgContext);
+        } catch (SOAPProcessingException e) {
+            throw new AxisFault(e);
+        } catch (OMException e) {
+            throw new AxisFault(e);
+        } catch (XMLStreamException e) {
+            throw new AxisFault(e);
+        } 
     }
 
     public static boolean  processHTTPGetRequest(
@@ -88,7 +126,8 @@
         String soapAction,
         String requestURI,
         ConfigurationContext configurationContext,Map requestParameters) throws AxisFault {
-
+            msgContext.setWSAAction(soapAction);
+            msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
         try {
             SOAPEnvelope envelope =
                 HTTPTransportUtils.createEnvelopeFromGetRequest(
@@ -135,4 +174,31 @@
             return null;
         }
     }
+    public static StAXBuilder selectBuilderForMIME(MessageContext msgContext, InputStream inStream,String contentTypeString) throws OMException, XMLStreamException, FactoryConfigurationError
+           {
+               StAXBuilder builder = null;
+               MIMEHelper mimeHelper = new MIMEHelper(inStream, contentTypeString);
+               XMLStreamReader reader = XMLInputFactory
+               .newInstance()
+               .createXMLStreamReader(
+                       new BufferedReader(
+                               new InputStreamReader(mimeHelper
+                                       .getSOAPPartInputStream())));
+               /*
+                * put a reference to Attachments in to the message context
+                */
+               msgContext.setProperty("Attachments", mimeHelper);
+               if (mimeHelper.getAttachmentSpecType().equals(
+                       MIMEHelper.MTOM_TYPE)) {
+                   /*
+                    * Creates the MTOM specific MTOMStAXSOAPModelBuilder
+                    */
+                   builder = new MTOMStAXSOAPModelBuilder(reader,
+                           mimeHelper);
+               } else if (mimeHelper.getAttachmentSpecType().equals(
+                       MIMEHelper.SWA_TYPE)) {
+                   builder = new StAXSOAPModelBuilder(reader);
+               }
+               return builder;
+           }
 }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java Mon Jun 27 20:01:37 2005
@@ -17,23 +17,16 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
-import java.util.Map;
 
-import javax.xml.namespace.QName;
-
-import org.apache.axis.Constants;
 import org.apache.axis.addressing.AddressingConstants;
 import org.apache.axis.addressing.EndpointReference;
 import org.apache.axis.clientapi.ListenerManager;
 import org.apache.axis.context.ConfigurationContext;
 import org.apache.axis.context.ConfigurationContextFactory;
-import org.apache.axis.context.MessageContext;
 import org.apache.axis.description.Parameter;
 import org.apache.axis.description.TransportInDescription;
-import org.apache.axis.description.TransportOutDescription;
 import org.apache.axis.engine.AxisFault;
 import org.apache.axis.transport.TransportListener;
 import org.apache.commons.logging.Log;
@@ -65,11 +58,6 @@
     protected ServerSocket serverSocket;
 
     /**
-     * Field socket
-     */
-    protected Socket socket;
-
-    /**
      * are we stopped?
      * latch to true if stop() is called
      */
@@ -126,9 +114,8 @@
     public void run() {
         try {
             while (!stopped) {
-                try {
-
                     // Accept and process requests from the socket
+                    Socket socket = null;
                     try {
                         socket = serverSocket.accept();
                     } catch (java.io.InterruptedIOException iie) {
@@ -137,81 +124,8 @@
                         break;
                     }
                     if (socket != null) {
-                        if (configurationContext == null) {
-                            throw new AxisFault("Engine Must be null");
-                        }
-
-                        InputStream inStream = socket.getInputStream();
-
-                        
-
-                        TransportOutDescription transportOut =
-                            configurationContext.getAxisConfiguration().getTransportOut(
-                                new QName(Constants.TRANSPORT_HTTP));
-                        MessageContext msgContext =
-                            new MessageContext(
-                                configurationContext,
-                                configurationContext.getAxisConfiguration().getTransportIn(
-                                    new QName(Constants.TRANSPORT_HTTP)),
-                                transportOut);
-                        msgContext.setServerSide(true);
-
-                        // We do not have any Addressing Headers to put
-                        // let us put the information about incoming transport
-                        HTTPTransportReceiver reciver = new HTTPTransportReceiver();
-                        Map map = reciver.parseTheHeaders(inStream, true);
-                        
-                        SimpleHTTPOutputStream out;
-                        String transferEncoding = (String)map.get(HTTPConstants.HEADER_TRANSFER_ENCODING);
-                        if(transferEncoding != null 
-                            && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(transferEncoding)){
-                                inStream = new ChunkedInputStream(inStream);
-                                out = new SimpleHTTPOutputStream(socket.getOutputStream(),true);
-                            }else{
-                                out = new SimpleHTTPOutputStream(socket.getOutputStream(),false);
-                            }
-
-                        //OutputStream out = socket.getOutputStream();
-                        msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
-                        
-                        
-                        
-                             if (HTTPConstants.HEADER_GET.equals(map.get(HTTPConstants.HTTP_REQ_TYPE))) {
-                                 boolean processed = HTTPTransportUtils.processHTTPGetRequest(msgContext,
-                                    inStream,
-                                    out, 
-                                    (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
-                                    (String) map.get(HTTPConstants.HEADER_SOAP_ACTION), 
-                                    (String) map.get(HTTPConstants.REQUEST_URI),
-                                    configurationContext,
-                                    HTTPTransportReceiver.getGetRequestParameters((String) map.get(HTTPConstants.REQUEST_URI)));
-                                    
-                                    if(!processed){
-                                        out.write(HTTPTransportReceiver.getServicesHTML(configurationContext).getBytes());
-                                                                    out.flush();
-                                    }
-                                 } else {
-                                     HTTPTransportUtils.processHTTPPostRequest(msgContext,
-                                    inStream,
-                                    out, 
-                                    (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
-                                    (String) map.get(HTTPConstants.HEADER_SOAP_ACTION), 
-                                    (String) map.get(HTTPConstants.REQUEST_URI),
-                                    configurationContext);
-                                 }
-
-
-                        out.finalize();
-                    }
-                } catch (Throwable e) {
-                    log.error(e);
-                    e.printStackTrace();
-                } finally {
-                    if (socket != null) {
-                        this.socket.close();
-                        this.socket = null;
+                        configurationContext.getThreadPool().addWorker(new HTTPWorker(configurationContext,socket));
                     }
-                }
             }
         } catch (IOException e) {
             log.error(e);

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java Mon Jun 27 20:01:37 2005
@@ -37,10 +37,11 @@
 import org.apache.axis.om.impl.llom.builder.StAXBuilder;
 import org.apache.axis.soap.SOAPEnvelope;
 import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
+import org.apache.axis.util.threadpool.AxisWorker;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-public class MailWorker implements Runnable {
+public class MailWorker implements AxisWorker {
     protected static Log log = LogFactory.getLog(MailWorker.class.getName());
 
     private String contentType = "text/xml";
@@ -68,7 +69,7 @@
     /**
      * The main workhorse method.
      */
-    public void run() {
+    public void doWork() {
         // create an Axis server
         AxisEngine engine = new AxisEngine(reg);
         MessageContext msgContext = null;

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java Mon Jun 27 20:01:37 2005
@@ -158,7 +158,7 @@
                         MimeMessage msg = (MimeMessage) msgs[i];
                         if (msg != null) {
                             MailWorker worker = new MailWorker(msg, configurationContext);
-                            worker.run();
+                            configurationContext.getThreadPool().addWorker(worker);
                         }
                         msg.setFlag(Flags.Flag.DELETED, true);
                     }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java Mon Jun 27 20:01:37 2005
@@ -17,32 +17,18 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Reader;
 import java.net.ServerSocket;
 import java.net.Socket;
 
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.axis.Constants;
 import org.apache.axis.addressing.AddressingConstants;
 import org.apache.axis.addressing.EndpointReference;
 import org.apache.axis.clientapi.ListenerManager;
 import org.apache.axis.context.ConfigurationContext;
 import org.apache.axis.context.ConfigurationContextFactory;
-import org.apache.axis.context.MessageContext;
 import org.apache.axis.deployment.DeploymentException;
 import org.apache.axis.description.Parameter;
 import org.apache.axis.description.TransportInDescription;
-import org.apache.axis.description.TransportOutDescription;
-import org.apache.axis.engine.AxisEngine;
 import org.apache.axis.engine.AxisFault;
-import org.apache.axis.om.impl.llom.builder.StAXBuilder;
-import org.apache.axis.soap.SOAPEnvelope;
-import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
 import org.apache.axis.transport.TransportListener;
 import org.apache.axis.transport.http.SimpleHTTPServer;
 import org.apache.commons.logging.Log;
@@ -58,7 +44,8 @@
     private ConfigurationContext configContext;
 
     protected Log log = LogFactory.getLog(SimpleHTTPServer.class.getName());
-    public TCPServer(){}
+    public TCPServer() {
+    }
 
     public TCPServer(int port, String dir) throws AxisFault {
         try {
@@ -86,7 +73,6 @@
         while (started) {
             Socket socket = null;
             try {
-
                 try {
                     socket = serversocket.accept();
                 } catch (java.io.InterruptedIOException iie) {
@@ -94,47 +80,12 @@
                     log.debug(e);
                     break;
                 }
-
-                
-                Reader in = new InputStreamReader(socket.getInputStream());
-                TransportOutDescription transportOut =
-                    configContext.getAxisConfiguration().getTransportOut(
-                        new QName(Constants.TRANSPORT_TCP));
-                MessageContext msgContext =
-                    new MessageContext(
-                        configContext,
-                        configContext.getAxisConfiguration().getTransportIn(
-                            new QName(Constants.TRANSPORT_TCP)),
-                        transportOut);
-                msgContext.setServerSide(true);
-                OutputStream out = socket.getOutputStream();
-                msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
-
-                AxisEngine engine = new AxisEngine(configContext);
-                try {
-                    XMLStreamReader xmlreader =
-                        XMLInputFactory.newInstance().createXMLStreamReader(in);
-                    StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader);
-                    msgContext.setEnvelope((SOAPEnvelope) builder.getDocumentElement());
-                } catch (Exception e) {
-                    throw new AxisFault(e.getMessage(), e);
+                if (socket != null) {
+                    configContext.getThreadPool().addWorker(new TCPWorker(configContext, socket));
                 }
-                engine.receive(msgContext);
-            } catch (Throwable e) {
+            } catch (AxisFault e) {
                 log.error(e);
                 e.printStackTrace();
-            } finally {
-                try {
-                    if (socket != null) {
-                        socket.close();
-                        if (!started) {
-                            serversocket.close();
-                        }
-                    }
-
-                } catch (IOException e1) {
-                    log.error(e1);
-                }
             }
         }
 
@@ -177,13 +128,13 @@
         }
 
     }
-    public static void main(String[] args) throws AxisFault, NumberFormatException{
+    public static void main(String[] args) throws AxisFault, NumberFormatException {
         if (args.length != 2) {
             System.out.println("TCPServer repositoryLocation port");
         }
-        TCPServer tcpServer = new TCPServer(Integer.parseInt(args[1]),args[0]);
+        TCPServer tcpServer = new TCPServer(Integer.parseInt(args[1]), args[0]);
         System.out.println("[Axis2] Using the Repository " + new File(args[1]).getAbsolutePath());
-        System.out.println("[Axis2] Starting the TCP Server on port "+ args[0]);
+        System.out.println("[Axis2] Starting the TCP Server on port " + args[0]);
         tcpServer.start();
     }
 

Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java Mon Jun 27 20:01:37 2005
@@ -27,7 +27,6 @@
 import org.apache.axis.addressing.EndpointReference;
 import org.apache.axis.clientapi.MessageSender;
 import org.apache.axis.context.ConfigurationContext;
-import org.apache.axis.context.ConfigurationContextFactory;
 import org.apache.axis.context.MessageContext;
 import org.apache.axis.description.OperationDescription;
 import org.apache.axis.description.ParameterImpl;
@@ -71,9 +70,7 @@
     }
 
     protected void setUp() throws Exception {
-        ConfigurationContextFactory builder = new ConfigurationContextFactory();
-        ConfigurationContext configContext =
-            builder.buildConfigurationContext(org.apache.axis.Constants.TESTING_REPOSITORY);
+        ConfigurationContext configContext = new ConfigurationContext(new AxisConfigurationImpl());
         LocalTransportReceiver.CONFIG_CONTEXT = configContext;
 
         ServiceDescription service = new ServiceDescription(serviceName);