You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by he...@apache.org on 2005/07/20 17:51:51 UTC

svn commit: r219929 - in /webservices/axis/trunk/java/modules/core: src/org/apache/axis2/ src/org/apache/axis2/description/ src/org/apache/axis2/engine/ src/org/apache/axis2/receivers/ src/org/apache/axis2/transport/http/ src/org/apache/axis2/transport...

Author: hemapani
Date: Wed Jul 20 08:51:50 2005
New Revision: 219929

URL: http://svn.apache.org/viewcvs?rev=219929&view=rev
Log:
updates to the fault handling, add some comments and improve http request prcessing code

Added:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchingChecker.java
      - copied, changed from r219833, webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchPostConditionsEvaluator.java
Removed:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchPostConditionsEvaluator.java
Modified:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/Constants.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/description/OperationDescription.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisConfigurationImpl.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/AxisServlet.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPWorker.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/MailWorker.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/server/MailSorter.java
    webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/tcp/TCPWorker.java
    webservices/axis/trunk/java/modules/core/test/org/apache/axis2/engine/EnginePausingTest.java

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/Constants.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/Constants.java Wed Jul 20 08:51:50 2005
@@ -180,7 +180,7 @@
 
 
     public static final String TESTING_PATH = "target/test-resources/";
-    //public static final String TESTING_PATH = "modules/samples/target/test-resources/";
+   // public static final String TESTING_PATH = "modules/samples/target/test-resources/";
 
     public static final String TESTING_REPOSITORY = TESTING_PATH + "samples";
 

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/description/OperationDescription.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/description/OperationDescription.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/description/OperationDescription.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/description/OperationDescription.java Wed Jul 20 08:51:50 2005
@@ -8,6 +8,7 @@
 import org.apache.axis2.engine.AxisError;
 import org.apache.axis2.engine.AxisFault;
 import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.engine.MustUnderstandChecker;
 import org.apache.axis2.engine.Phase;
 import org.apache.axis2.phaseresolver.PhaseMetadata;
 import org.apache.axis2.phaseresolver.PhaseResolver;
@@ -46,6 +47,9 @@
         remainingPhasesInFlow = new ArrayList();
         remainingPhasesInFlow.add(
                 new Phase(PhaseMetadata.PHASE_POLICY_DETERMINATION));
+        Phase messageProcessing = new Phase(PhaseMetadata.PHASE_MESSAGE_PROCESSING);
+        messageProcessing.addHandler(new MustUnderstandChecker());  
+        remainingPhasesInFlow.add(messageProcessing);              
 
         phasesOutFlow = new ArrayList();
         phasesOutFlow.add(new Phase(PhaseMetadata.PHASE_POLICY_DETERMINATION));

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisConfigurationImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisConfigurationImpl.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisConfigurationImpl.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisConfigurationImpl.java Wed Jul 20 08:51:50 2005
@@ -122,7 +122,7 @@
         inPhasesUptoAndIncludingPostDispatch.add(dispatch);
 
         Phase postDispatch = new Phase(PhaseMetadata.PHASE_POST_DISPATCH);
-        postDispatch.addHandler(new DispatchPostConditionsEvaluator());
+        postDispatch.addHandler(new DispatchingChecker());
         inPhasesUptoAndIncludingPostDispatch.add(postDispatch);
     }
 

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java Wed Jul 20 08:51:50 2005
@@ -15,6 +15,8 @@
  */
 package org.apache.axis2.engine;
 
+import java.util.ArrayList;
+
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
@@ -27,14 +29,11 @@
 import org.apache.axis2.soap.SOAPFaultCode;
 import org.apache.axis2.soap.SOAPFaultDetail;
 import org.apache.axis2.soap.SOAPFaultReason;
-import org.apache.axis2.soap.impl.llom.SOAPProcessingException;
 import org.apache.axis2.soap.impl.llom.soap12.SOAP12Constants;
 import org.apache.axis2.transport.TransportSender;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import java.util.ArrayList;
-
 /**
  * There is one engine for the Server and the Client. the send() and receive()
  * Methods are the basic operations the Sync, Async messageing are build on top.
@@ -67,24 +66,22 @@
      * @see Handler
      */
     public void send(MessageContext msgContext) throws AxisFault {
-        try {
-            verifyContextBuilt(msgContext);
-            OperationContext operationContext = msgContext.getOperationContext();
-
-            ArrayList phases = operationContext.getAxisOperation()
-                    .getPhasesOutFlow();
-            if (msgContext.isPaused()) {
-                resumeInvocationPhases(phases, msgContext);
-            } else {
-                invokePhases(phases, msgContext);
-            }
-
+        verifyContextBuilt(msgContext);
+        
+        //find and invoke the Phases        
+        OperationContext operationContext = msgContext.getOperationContext();
+        ArrayList phases = operationContext.getAxisOperation().getPhasesOutFlow();
+        if (msgContext.isPaused()) {
+            resumeInvocationPhases(phases, msgContext);
+        } else {
+            invokePhases(phases, msgContext);
+        }
+        
+        if (!msgContext.isPaused()) {
+            //write the Message to the Wire
             TransportOutDescription transportOut = msgContext.getTransportOut();
-
             TransportSender sender = transportOut.getSender();
             sender.invoke(msgContext);
-        } catch (Throwable e) {
-            handleFault(msgContext, e);
         }
     }
 
@@ -101,37 +98,96 @@
      * @see Handler
      */
     public void receive(MessageContext msgContext) throws AxisFault {
-        boolean paused = msgContext.isPaused();
-        try {
-            ConfigurationContext sysCtx = msgContext.getSystemContext();
-            ArrayList phases =
-                    sysCtx.getAxisConfiguration()
-                    .getInPhasesUptoAndIncludingPostDispatch();
+        ConfigurationContext sysCtx = msgContext.getSystemContext();
+        OperationDescription operationDescription = null;
+        ArrayList preCalculatedPhases = sysCtx.getAxisConfiguration().getInPhasesUptoAndIncludingPostDispatch();
+        ArrayList operationSpecificPhases = null;
+        
+        if (msgContext.isPaused()) {
+            resumeInvocationPhases(preCalculatedPhases, msgContext);
+
+            verifyContextBuilt(msgContext);
+            OperationContext operationContext = msgContext.getOperationContext();
+            operationDescription = operationContext.getAxisOperation();
+            operationSpecificPhases = operationDescription.getRemainingPhasesInFlow();
+            
+            resumeInvocationPhases(operationSpecificPhases, msgContext);
+            
+        } else {
+            invokePhases(preCalculatedPhases, msgContext);
+            verifyContextBuilt(msgContext);
+            OperationContext operationContext = msgContext.getOperationContext();
+            operationDescription = operationContext.getAxisOperation();
+            operationSpecificPhases = operationDescription.getRemainingPhasesInFlow();
+            invokePhases(operationSpecificPhases, msgContext);
+        }
+
+        if (msgContext.isServerSide() && !msgContext.isPaused()) {
+            // invoke the Message Receivers
+            MessageReceiver receiver = operationDescription.getMessageReciever();
+            receiver.recieve(msgContext);
+        }
+    }
 
-            if (paused) {
+    /**
+     * This Method Send the SOAP Fault to a Other SOAP Node
+     * @param msgContext
+     * @throws AxisFault
+     */
+    public void sendFault(MessageContext msgContext) throws AxisFault {
+        OperationContext opContext = msgContext.getOperationContext();
+        //find and execute the Fault Out Flow Handlers
+        if (opContext != null) {
+            OperationDescription axisOperation = opContext.getAxisOperation();
+            ArrayList phases = axisOperation.getPhasesOutFaultFlow();
+            if (msgContext.isPaused()) {
                 resumeInvocationPhases(phases, msgContext);
             } else {
                 invokePhases(phases, msgContext);
             }
-            verifyContextBuilt(msgContext);
+        }
+        //it is possible that Operation Context is Null as the error occered before the 
+        //Dispatcher. We do not run Handlers in that case 
 
-            OperationContext operationContext = msgContext.getOperationContext();
-            OperationDescription operationDescription = operationContext.getAxisOperation();
-            phases = operationDescription.getRemainingPhasesInFlow();
+        if (!msgContext.isPaused()) {
+            //Actually send the SOAP Fault
+            TransportSender sender = msgContext.getTransportOut().getSender();
+            sender.invoke(msgContext);
+        }
+    }
 
-            if (paused) {
+    /**
+     * This is invoked when a SOAP Fault is received from a Other SOAP Node
+     * @param msgContext
+     * @throws AxisFault
+     */
+    public void receiveFault(MessageContext msgContext) throws AxisFault {
+
+        OperationContext opContext = msgContext.getOperationContext();
+        if (opContext == null) {
+            //If we do not have a OperationContext that means this may be a incoming 
+            //Dual Channel response. So try to dispatch the Service 
+            ConfigurationContext sysCtx = msgContext.getSystemContext();
+            ArrayList phases =
+                sysCtx.getAxisConfiguration().getInPhasesUptoAndIncludingPostDispatch();
+
+            if (msgContext.isPaused()) {
                 resumeInvocationPhases(phases, msgContext);
             } else {
                 invokePhases(phases, msgContext);
             }
-            paused = msgContext.isPaused();
-            if (msgContext.isServerSide() && !paused) {
-                // add invoke Phase
-                MessageReceiver receiver = operationDescription.getMessageReciever();
-                receiver.recieve(msgContext);
+            verifyContextBuilt(msgContext);
+        }
+        opContext = msgContext.getOperationContext();
+        //find and execute the Fault In Flow Handlers
+        if (opContext != null) {
+            OperationDescription axisOperation = opContext.getAxisOperation();
+            ArrayList phases = axisOperation.getPhasesInFaultFlow();
+            if (msgContext.isPaused()) {
+                resumeInvocationPhases(phases, msgContext);
+            } else {
+                invokePhases(phases, msgContext);
             }
-        } catch (Throwable e) {
-            handleFault(msgContext, e);
         }
     }
 
@@ -144,112 +200,84 @@
      * @param e
      * @throws AxisFault
      */
-    public void handleFault(MessageContext context, Throwable e) throws AxisFault {
-        boolean serverSide = context.isServerSide();
-        log.error("Error Ocurred", e);
-        if (serverSide && !context.isProcessingFault()) {
-            context.setProcessingFault(true);
-
-            // create a SOAP envelope with the Fault
-            MessageContext faultContext =
-                    new MessageContext(engineContext,
-                                       context.getSessionContext(),
-                                       context.getTransportIn(),
-                                       context.getTransportOut());
-
-            if (context.getFaultTo() != null) {
-                faultContext.setFaultTo(context.getFaultTo());
+    public MessageContext createFaultMessageContext(MessageContext processingContext, Throwable e)
+        throws AxisFault {
+        if (processingContext.isProcessingFault()) {
+            //We get the error file processing the fault. nothing we can do
+            throw new AxisFault(
+                "Error occured while processing Fault, Previous error is given in the stack trace",
+                e);
+        }
+
+        MessageContext faultContext =
+            new MessageContext(
+                engineContext,
+                processingContext.getSessionContext(),
+                processingContext.getTransportIn(),
+                processingContext.getTransportOut());
+
+        faultContext.setProcessingFault(true);
+        if (processingContext.getFaultTo() != null) {
+            faultContext.setFaultTo(processingContext.getFaultTo());
+        } else {
+            Object writer = processingContext.getProperty(MessageContext.TRANSPORT_OUT);
+            if (writer != null) {
+                faultContext.setProperty(MessageContext.TRANSPORT_OUT, writer);
             } else {
-                Object writer = context.getProperty(
-                        MessageContext.TRANSPORT_OUT);
-                if (writer != null) {
-                    faultContext.setProperty(MessageContext.TRANSPORT_OUT,
-                                             writer);
-                } else {
-                    //TODO Opps there are no place to send this, we will log and should we throw the exception? 
-                    log.error("Error in fault flow", e);
-                    e.printStackTrace();
-                }
-            }
-
-            faultContext.setOperationContext(context.getOperationContext());
-            faultContext.setProcessingFault(true);
-            faultContext.setServerSide(true);
-            SOAPEnvelope envelope = null;
-
-            try {
-
-                if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(
-                        context.getEnvelope().getNamespace().getName())) {
-                    envelope =
-                            OMAbstractFactory.getSOAP12Factory()
-                            .getDefaultFaultEnvelope();
-                } else {
-                    envelope =
-                            OMAbstractFactory.getSOAP11Factory()
-                            .getDefaultFaultEnvelope();
-                }
-            } catch (SOAPProcessingException e1) {
-                throw new AxisFault(e1);
+                //TODO Opps there are no place to send this, we will log and should we throw the exception? 
+                throw new AxisFault("No where to send the Error, the return response path is missing and FaultTo not specified");
             }
+        }
 
-            // TODO do we need to set old Headers back?
-            SOAPBody body = envelope.getBody();
-            
-//            body.addFault(new AxisFault(e.getMessage(), e));
-            body.getFault().setException(new AxisFault(e.getMessage(), e));
-            extractFaultInformationFromMessageContext(context,
-                                                      envelope.getBody()
-                                                      .getFault());
-
-            faultContext.setEnvelope(envelope);
-
-            OperationContext opContext = context.getOperationContext();
-            if (opContext != null) {
-                OperationDescription axisOperation = opContext.getAxisOperation();
-                ArrayList phases = axisOperation.getPhasesOutFaultFlow();
-                invokePhases(phases, context);
-            }
-            // Write the the error
-            TransportSender sender = context.getTransportOut().getSender();
-            sender.invoke(faultContext);
-        } else if (!serverSide) {
-            // if at the client side throw the exception
-            throw new AxisFault("", e);
+        faultContext.setOperationContext(processingContext.getOperationContext());
+        faultContext.setProcessingFault(true);
+        faultContext.setServerSide(true);
+        SOAPEnvelope envelope = null;
+
+        if (SOAP12Constants
+            .SOAP_ENVELOPE_NAMESPACE_URI
+            .equals(processingContext.getEnvelope().getNamespace().getName())) {
+            envelope = OMAbstractFactory.getSOAP12Factory().getDefaultFaultEnvelope();
         } else {
-            // TODO log and exit
-            log.error("Error in fault flow", e);
+            envelope = OMAbstractFactory.getSOAP11Factory().getDefaultFaultEnvelope();
         }
+
+        // TODO do we need to set old Headers back?
+        SOAPBody body = envelope.getBody();
+
+        //            body.addFault(new AxisFault(e.getMessage(), e));
+        body.getFault().setException(new AxisFault(e));
+        extractFaultInformationFromMessageContext(processingContext, envelope.getBody().getFault());
+
+        faultContext.setEnvelope(envelope);
+        sendFault(faultContext);
+        return faultContext;
     }
 
     private void extractFaultInformationFromMessageContext(
-            MessageContext context, SOAPFault fault) {
-        Object faultCode = context.getProperty(
-                SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME);
+        MessageContext context,
+        SOAPFault fault) {
+        Object faultCode = context.getProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME);
         if (faultCode != null) {
             fault.setCode((SOAPFaultCode) faultCode);
         }
 
-        Object faultReason = context.getProperty(
-                SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME);
+        Object faultReason = context.getProperty(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME);
         if (faultReason != null) {
             fault.setReason((SOAPFaultReason) faultReason);
         }
 
-        Object faultRole = context.getProperty(
-                SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME);
+        Object faultRole = context.getProperty(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME);
         if (faultRole != null) {
             fault.getRole().setText((String) faultRole);
         }
 
-        Object faultNode = context.getProperty(
-                SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME);
+        Object faultNode = context.getProperty(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME);
         if (faultNode != null) {
             fault.getNode().setText((String) faultNode);
         }
 
-        Object faultDetail = context.getProperty(
-                SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME);
+        Object faultDetail = context.getProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME);
         if (faultDetail != null) {
             fault.setDetail((SOAPFaultDetail) faultDetail);
         }
@@ -269,14 +297,13 @@
 
     private void invokePhases(ArrayList phases, MessageContext msgctx) throws AxisFault {
         int count = phases.size();
-        for (int i = 0; (i < count && !msgctx.isPaused()); i++) {
+        for (int i = 0;(i < count && !msgctx.isPaused()); i++) {
             Phase phase = (Phase) phases.get(i);
             phase.invoke(msgctx);
         }
     }
 
-    public void resumeInvocationPhases(ArrayList phases,
-                                       MessageContext msgctx) throws AxisFault {
+    public void resumeInvocationPhases(ArrayList phases, MessageContext msgctx) throws AxisFault {
         msgctx.setPausedFalse();
         int count = phases.size();
         boolean foundMatch = false;
@@ -285,8 +312,7 @@
             Phase phase = (Phase) phases.get(i);
             if (phase.getPhaseName().equals(msgctx.getPausedPhaseName())) {
                 foundMatch = true;
-                phase.invokeStartFromHandler(msgctx.getPausedHandlerName(),
-                                             msgctx);
+                phase.invokeStartFromHandler(msgctx.getPausedHandlerName(), msgctx);
             } else {
                 if (foundMatch) {
                     phase.invoke(msgctx);

Copied: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchingChecker.java (from r219833, webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchPostConditionsEvaluator.java)
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchingChecker.java?p2=webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchingChecker.java&p1=webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchPostConditionsEvaluator.java&r1=219833&r2=219929&rev=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchPostConditionsEvaluator.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/engine/DispatchingChecker.java Wed Jul 20 08:51:50 2005
@@ -26,7 +26,7 @@
 /**
  * Class Dispatcher
  */
-public class DispatchPostConditionsEvaluator extends AbstractHandler implements Handler {
+public class DispatchingChecker extends AbstractHandler implements Handler {
     /**
      * Field NAME
      */
@@ -39,7 +39,7 @@
      */
     private ConfigurationContext engineContext;
 
-    public DispatchPostConditionsEvaluator() {
+    public DispatchingChecker() {
         init(new HandlerDescription(NAME));
     }
 

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractInOutAsyncMessageReceiver.java Wed Jul 20 08:51:50 2005
@@ -24,30 +24,26 @@
 /**
  * This is takes care of the IN-OUT sync MEP in the server side
  */
-public abstract class AbstractInOutAsyncMessageReceiver
-        extends AbstractMessageReceiver {
+public abstract class AbstractInOutAsyncMessageReceiver extends AbstractMessageReceiver {
     protected Log log = LogFactory.getLog(getClass());
 
-    public abstract void invokeBusinessLogic(MessageContext inMessage,
-                                             ServerCallback callback)
-            throws AxisFault;
+    public abstract void invokeBusinessLogic(MessageContext inMessage, ServerCallback callback)
+        throws AxisFault;
 
     public final void recieve(final MessageContext messgeCtx) throws AxisFault {
         final ServerCallback callback = new ServerCallback() {
             public void handleResult(MessageContext result) throws AxisFault {
                 AxisEngine engine =
-                        new AxisEngine(
-                                messgeCtx.getOperationContext()
-                        .getServiceContext()
-                        .getEngineContext());
+                    new AxisEngine(
+                        messgeCtx.getOperationContext().getServiceContext().getEngineContext());
                 engine.send(messgeCtx);
             }
-
             public void handleFault(AxisFault fault) throws AxisFault {
-                AxisEngine engine = new AxisEngine(
-                        messgeCtx.getOperationContext().getServiceContext()
-                        .getEngineContext());
-                engine.handleFault(messgeCtx, fault);
+                AxisEngine engine =
+                    new AxisEngine(
+                        messgeCtx.getOperationContext().getServiceContext().getEngineContext());
+                MessageContext faultContext = engine.createFaultMessageContext(messgeCtx, fault);
+                engine.sendFault(faultContext);
             }
         };
         Runnable theadedTask = new Runnable() {

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/receivers/AbstractRobustInMessageReceiver.java Wed Jul 20 08:51:50 2005
@@ -24,8 +24,7 @@
 /**
  * This is takes care of the IN-OUT sync MEP in the server side
  */
-public abstract class AbstractRobustInMessageReceiver
-        extends AbstractMessageReceiver {
+public abstract class AbstractRobustInMessageReceiver extends AbstractMessageReceiver {
     protected Log log = LogFactory.getLog(getClass());
 
     public abstract void invokeBusinessLogic(MessageContext inMessage) throws AxisFault;
@@ -34,10 +33,11 @@
         try {
             invokeBusinessLogic(messgeCtx);
         } catch (AxisFault e) {
-            AxisEngine engine = new AxisEngine(
-                    messgeCtx.getOperationContext().getServiceContext()
-                    .getEngineContext());
-            engine.handleFault(messgeCtx, e);
+            AxisEngine engine =
+                new AxisEngine(
+                    messgeCtx.getOperationContext().getServiceContext().getEngineContext());
+            MessageContext faultContext = engine.createFaultMessageContext(messgeCtx, e);
+            engine.sendFault(faultContext);
         }
     }
 

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/AxisServlet.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/AxisServlet.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/AxisServlet.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/AxisServlet.java Wed Jul 20 08:51:50 2005
@@ -40,13 +40,8 @@
  * Class AxisServlet
  */
 public class AxisServlet extends HttpServlet {
-    /**
-     * Field engineRegistry
-     */
-
-    private ConfigurationContext configContext;
-
     private ListingAgent lister;
+    private static final String CONFIGURATION_CONTEXT = "CONFIGURATION_CONTEXT";
 
     /**
      * Method init
@@ -59,11 +54,11 @@
             ServletContext context = config.getServletContext();
             String repoDir = context.getRealPath("/WEB-INF");
             ConfigurationContextFactory erfac = new ConfigurationContextFactory();
-            configContext = erfac.buildConfigurationContext(repoDir);
-            configContext.setProperty(Constants.CONTAINER_MANAGED,
-                    Constants.VALUE_TRUE);
+            ConfigurationContext configContext = erfac.buildConfigurationContext(repoDir);
+            configContext.setProperty(Constants.CONTAINER_MANAGED, Constants.VALUE_TRUE);
             configContext.setRootDir(new File(context.getRealPath("/WEB-INF")));
             lister = new ListingAgent(configContext);
+            context.setAttribute(CONFIGURATION_CONTEXT, configContext);
         } catch (Exception e) {
             throw new ServletException(e);
         }
@@ -77,21 +72,25 @@
      * @throws ServletException
      * @throws IOException
      */
-    protected void doGet(HttpServletRequest httpServletRequest,
-                         HttpServletResponse httpServletResponse)
-            throws ServletException, IOException {
+    protected void doGet(
+        HttpServletRequest httpServletRequest,
+        HttpServletResponse httpServletResponse)
+        throws ServletException, IOException {
+
+        ConfigurationContext configContext =
+            (ConfigurationContext) getServletContext().getAttribute(CONFIGURATION_CONTEXT);
+
         httpServletResponse.setContentType("text/xml; charset=utf-8");
         MessageContext msgContext = null;
         OutputStream out = null;
         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(
-                        Constants.SESSION_CONTEXT_PROPERTY,
-                        sessionContext);
+                    Constants.SESSION_CONTEXT_PROPERTY,
+                    sessionContext);
             }
 
             Enumeration enu = httpServletRequest.getParameterNames();
@@ -103,35 +102,40 @@
             }
 
             msgContext =
-                    new MessageContext(configContext,
-                            (SessionContext) sessionContext,
-                            configContext.getAxisConfiguration()
-                    .getTransportIn(new QName(Constants.TRANSPORT_HTTP)),
-                            configContext.getAxisConfiguration()
-                    .getTransportOut(new QName(Constants.TRANSPORT_HTTP)));
+                new MessageContext(
+                    configContext,
+                    (SessionContext) sessionContext,
+                    configContext.getAxisConfiguration().getTransportIn(
+                        new QName(Constants.TRANSPORT_HTTP)),
+                    configContext.getAxisConfiguration().getTransportOut(
+                        new QName(Constants.TRANSPORT_HTTP)));
             msgContext.setDoingREST(true);
             msgContext.setServerSide(true);
-            msgContext.setProperty(HTTPConstants.HTTPOutTransportInfo,
-                    new ServletBasedOutTransportInfo(httpServletResponse));
+            msgContext.setProperty(
+                HTTPConstants.HTTPOutTransportInfo,
+                new ServletBasedOutTransportInfo(httpServletResponse));
             out = httpServletResponse.getOutputStream();
             boolean processed =
-                    HTTPTransportUtils.processHTTPGetRequest(msgContext,
-                            httpServletRequest.getInputStream(),
-                            out,
-                            httpServletRequest.getContentType(),
-                            httpServletRequest.getHeader(
-                                    HTTPConstants.HEADER_SOAP_ACTION),
-                            httpServletRequest.getRequestURL().toString(),
-                            configContext,
-                            map);
+                HTTPTransportUtils.processHTTPGetRequest(
+                    msgContext,
+                    httpServletRequest.getInputStream(),
+                    out,
+                    httpServletRequest.getContentType(),
+                    httpServletRequest.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+                    httpServletRequest.getRequestURL().toString(),
+                    configContext,
+                    map);
             if (!processed) {
                 lister.handle(httpServletRequest, httpServletResponse, out);
             }
         } catch (Exception e) {
-            AxisEngine engine = new AxisEngine(configContext);
             if (msgContext != null) {
                 msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
-                engine.handleFault(msgContext, e);
+                AxisEngine engine = new AxisEngine(configContext);
+                MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                engine.sendFault(faultContext);
+            } else {
+                throw new ServletException(e);
             }
         }
 
@@ -151,46 +155,50 @@
      * @throws IOException
      */
     protected void doPost(HttpServletRequest req, HttpServletResponse res)
-            throws ServletException, IOException {
+        throws ServletException, IOException {
         MessageContext msgContext = null;
+        ConfigurationContext configContext =
+            (ConfigurationContext) getServletContext().getAttribute(CONFIGURATION_CONTEXT);
         try {
             Object sessionContext =
-                    req.getSession().getAttribute(
-                            Constants.SESSION_CONTEXT_PROPERTY);
+                req.getSession().getAttribute(Constants.SESSION_CONTEXT_PROPERTY);
             if (sessionContext == null) {
                 sessionContext = new SessionContext(null);
-                req.getSession().setAttribute(
-                        Constants.SESSION_CONTEXT_PROPERTY, sessionContext);
+                req.getSession().setAttribute(Constants.SESSION_CONTEXT_PROPERTY, sessionContext);
             }
             msgContext =
-                    new MessageContext(configContext,
-                            (SessionContext) sessionContext,
-                            configContext.getAxisConfiguration()
-                    .getTransportIn(new QName(Constants.TRANSPORT_HTTP)),
-                            configContext.getAxisConfiguration()
-                    .getTransportOut(new QName(Constants.TRANSPORT_HTTP)));
-            msgContext.setProperty(HTTPConstants.HTTPOutTransportInfo,
-                    new ServletBasedOutTransportInfo(res));
+                new MessageContext(
+                    configContext,
+                    (SessionContext) sessionContext,
+                    configContext.getAxisConfiguration().getTransportIn(
+                        new QName(Constants.TRANSPORT_HTTP)),
+                    configContext.getAxisConfiguration().getTransportOut(
+                        new QName(Constants.TRANSPORT_HTTP)));
+            msgContext.setProperty(
+                HTTPConstants.HTTPOutTransportInfo,
+                new ServletBasedOutTransportInfo(res));
             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.getOperationContext()
-                    .getProperty(Constants.RESPONSE_WRITTEN);
-            if (contextWritten == null ||
-                    !Constants.VALUE_TRUE.equals(contextWritten)) {
+            HTTPTransportUtils.processHTTPPostRequest(
+                msgContext,
+                req.getInputStream(),
+                res.getOutputStream(),
+                req.getContentType(),
+                req.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+                req.getRequestURL().toString(),
+                configContext);
+            Object contextWritten =
+                msgContext.getOperationContext().getProperty(Constants.RESPONSE_WRITTEN);
+            if (contextWritten == null || !Constants.VALUE_TRUE.equals(contextWritten)) {
                 res.setStatus(HttpServletResponse.SC_ACCEPTED);
             }
         } catch (AxisFault e) {
-            AxisEngine engine = new AxisEngine(configContext);
             if (msgContext != null) {
-                msgContext.setProperty(MessageContext.TRANSPORT_OUT,
-                        res.getOutputStream());
-                engine.handleFault(msgContext, e);
+                msgContext.setProperty(MessageContext.TRANSPORT_OUT, res.getOutputStream());
+                AxisEngine engine = new AxisEngine(configContext);
+                MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                engine.sendFault(faultContext);
+            } else {
+                throw new ServletException(e);
             }
         }
     }

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPTransportUtils.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPTransportUtils.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPTransportUtils.java Wed Jul 20 08:51:50 2005
@@ -40,6 +40,7 @@
 import org.apache.axis2.soap.impl.llom.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.soap.impl.llom.soap11.SOAP11Constants;
 import org.apache.axis2.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.soap.impl.llom.soap12.SOAP12Constants;
 import org.apache.axis2.util.Utils;
 
 import javax.xml.parsers.FactoryConfigurationError;
@@ -57,67 +58,73 @@
 
 public class HTTPTransportUtils {
 
-    public static void processHTTPPostRequest(MessageContext msgContext,
-                                              InputStream in,
-                                              OutputStream out,
-                                              String contentType,
-                                              String soapAction,
-                                              String requestURI,
-                                              ConfigurationContext configurationContext) throws AxisFault {
+    public static void processHTTPPostRequest(
+        MessageContext msgContext,
+        InputStream in,
+        OutputStream out,
+        String contentType,
+        String soapAction,
+        String requestURI,
+        ConfigurationContext configurationContext)
+        throws AxisFault {
         try {
-            if (soapAction != null && soapAction.startsWith("\"") &&
-                    soapAction.endsWith("\"")) {
+            //remove the starting and trailing " from the SOAP Action
+            if (soapAction != null && soapAction.startsWith("\"") && soapAction.endsWith("\"")) {
                 soapAction = soapAction.substring(1, soapAction.length() - 1);
             }
+            //fill up the Message Contexts
             msgContext.setWSAAction(soapAction);
             msgContext.setSoapAction(soapAction);
-            msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO,
-                    requestURI));
+            msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
             msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
             msgContext.setServerSide(true);
 
             SOAPEnvelope envelope = null;
             StAXBuilder builder = null;
-
-
-            if (contentType.indexOf(
-                    HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED) >=
-                    0) {
-                builder = selectBuilderForMIME(msgContext, in, contentType);
-                envelope = (SOAPEnvelope) builder.getDocumentElement();
-            } else if (contentType != null
-                    &&
-                    contentType.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) >
-                    -1) {
-//If the content Type is text/xml (BTW which is the SOAP 1.1 Content type ) and
-//the SOAP Action is absent it is rest !!
-                Object enable = msgContext.getProperty(
-                        Constants.Configuration.ENABLE_REST);
-                if ((soapAction == null || soapAction.length() == 0)
-                        && Constants.VALUE_TRUE.equals(enable)) {
-                    msgContext.setDoingREST(true);
-                    SOAPFactory soapFactory = new SOAP11Factory();
+            if (contentType != null) {
+                if (contentType.indexOf(HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED) > -1) {
+                    //It is MTOM
+                    builder = selectBuilderForMIME(msgContext, in, contentType);
+                    envelope = (SOAPEnvelope) builder.getDocumentElement();
+                } else {
                     Reader reader = new InputStreamReader(in);
-                    XMLStreamReader xmlreader = XMLInputFactory.newInstance()
-                            .createXMLStreamReader(reader);
-                    builder = new StAXOMBuilder(xmlreader);
-                    builder.setOmbuilderFactory(soapFactory);
-                    envelope = soapFactory.getDefaultEnvelope();
-                    envelope.getBody().addChild(builder.getDocumentElement());
+                    XMLStreamReader xmlreader =
+                        XMLInputFactory.newInstance().createXMLStreamReader(reader);
+                    if (contentType.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
+                        //it is SOAP 1.2
+                        builder = new StAXSOAPModelBuilder(xmlreader);
+                        envelope = (SOAPEnvelope) builder.getDocumentElement();
+                    } else if (contentType.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
+                        //it is SOAP 1.1
+                        Object enable = msgContext.getProperty(Constants.Configuration.ENABLE_REST);
+                        if ((soapAction == null || soapAction.length() == 0)
+                            && Constants.VALUE_TRUE.equals(enable)) {
+                            //If the content Type is text/xml (BTW which is the SOAP 1.1 Content type ) and
+                            //the SOAP Action is absent it is rest !!
+                            msgContext.setDoingREST(true);
+                            SOAPFactory soapFactory = new SOAP11Factory();
+                            builder = new StAXOMBuilder(xmlreader);
+                            builder.setOmbuilderFactory(soapFactory);
+                            envelope = soapFactory.getDefaultEnvelope();
+                            envelope.getBody().addChild(builder.getDocumentElement());
+                        }else{
+                            builder = new StAXSOAPModelBuilder(xmlreader);
+                            envelope = (SOAPEnvelope) builder.getDocumentElement();
+                        }
+                    }
+
                 }
-            }
 
-            if (envelope == null) {
-                Reader reader = new InputStreamReader(in);
-                XMLStreamReader xmlreader = XMLInputFactory.newInstance()
-                        .createXMLStreamReader(reader);
-                builder = new StAXSOAPModelBuilder(xmlreader);
-                envelope = (SOAPEnvelope) builder.getDocumentElement();
             }
 
             msgContext.setEnvelope(envelope);
             AxisEngine engine = new AxisEngine(configurationContext);
-            engine.receive(msgContext);
+            if (envelope.getBody().hasFault()) {
+                engine.receiveFault(msgContext);
+            } else {
+                engine.receive(msgContext);
+            }
+
         } catch (SOAPProcessingException e) {
             throw new AxisFault(e);
         } catch (OMException e) {
@@ -127,29 +134,27 @@
         }
     }
 
-    public static boolean processHTTPGetRequest(MessageContext msgContext,
-                                                InputStream in,
-                                                OutputStream out,
-                                                String contentType,
-                                                String soapAction,
-                                                String requestURI,
-                                                ConfigurationContext configurationContext,
-                                                Map requestParameters)
-            throws AxisFault {
-        if (soapAction != null && soapAction.startsWith("\"") &&
-                soapAction.endsWith("\"")) {
+    public static boolean processHTTPGetRequest(
+        MessageContext msgContext,
+        InputStream in,
+        OutputStream out,
+        String contentType,
+        String soapAction,
+        String requestURI,
+        ConfigurationContext configurationContext,
+        Map requestParameters)
+        throws AxisFault {
+        if (soapAction != null && soapAction.startsWith("\"") && soapAction.endsWith("\"")) {
             soapAction = soapAction.substring(1, soapAction.length() - 1);
         }
         msgContext.setWSAAction(soapAction);
         msgContext.setSoapAction(soapAction);
-        msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO,
-                requestURI));
+        msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
         msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
         msgContext.setServerSide(true);
         try {
-            SOAPEnvelope envelope = HTTPTransportUtils
-                    .createEnvelopeFromGetRequest(requestURI,
-                            requestParameters);
+            SOAPEnvelope envelope =
+                HTTPTransportUtils.createEnvelopeFromGetRequest(requestURI, requestParameters);
             if (envelope == null) {
                 return false;
             } else {
@@ -164,18 +169,15 @@
         }
     }
 
-    public static final SOAPEnvelope createEnvelopeFromGetRequest(
-            String requestUrl, Map map) {
-        String[] values = Utils
-                .parseRequestURLForServiceAndOperation(requestUrl);
+    public static final SOAPEnvelope createEnvelopeFromGetRequest(String requestUrl, Map map) {
+        String[] values = Utils.parseRequestURLForServiceAndOperation(requestUrl);
 
         if (values[1] != null && values[0] != null) {
             String operation = values[1];
             SOAPFactory soapFactory = new SOAP11Factory();
             SOAPEnvelope envelope = soapFactory.getDefaultEnvelope();
 
-            OMNamespace omNs = soapFactory.createOMNamespace(values[0],
-                    "services");
+            OMNamespace omNs = soapFactory.createOMNamespace(values[0], "services");
             OMNamespace defualtNs = new OMNamespaceImpl("", null);
 
             OMElement opElement = soapFactory.createOMElement(operation, omNs);
@@ -196,32 +198,28 @@
         }
     }
 
-    public static StAXBuilder selectBuilderForMIME(MessageContext msgContext,
-                                                   InputStream inStream,
-                                                   String contentTypeString) throws OMException,
-            XMLStreamException, FactoryConfigurationError {
+    public static StAXBuilder selectBuilderForMIME(
+        MessageContext msgContext,
+        InputStream inStream,
+        String contentTypeString)
+        throws OMException, XMLStreamException, FactoryConfigurationError {
         StAXBuilder builder = null;
 
-        boolean fileCacheForAttachments = (Constants.VALUE_TRUE.equals(
-                msgContext.getProperty(
-                        Constants.Configuration.CACHE_ATTACHMENTS)));
+        boolean fileCacheForAttachments =
+            (Constants
+                .VALUE_TRUE
+                .equals(msgContext.getProperty(Constants.Configuration.CACHE_ATTACHMENTS)));
         String attachmentRepoDir = null;
         if (fileCacheForAttachments) {
             attachmentRepoDir =
-                    (String) msgContext.getProperty(
-                            Constants.Configuration.ATTACHMENT_TEMP_DIR);
+                (String) msgContext.getProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR);
         }
 
-        MIMEHelper mimeHelper = new MIMEHelper(inStream,
-                contentTypeString,
-                fileCacheForAttachments,
-                attachmentRepoDir);
-        XMLStreamReader reader = XMLInputFactory.newInstance()
-                .createXMLStreamReader(
-                        new BufferedReader(
-                                new InputStreamReader(
-                                        mimeHelper
-                .getSOAPPartInputStream())));
+        MIMEHelper mimeHelper =
+            new MIMEHelper(inStream, contentTypeString, fileCacheForAttachments, attachmentRepoDir);
+        XMLStreamReader reader =
+            XMLInputFactory.newInstance().createXMLStreamReader(
+                new BufferedReader(new InputStreamReader(mimeHelper.getSOAPPartInputStream())));
         /*
          * put a reference to Attachments in to the message context
          */
@@ -231,8 +229,7 @@
              * Creates the MTOM specific MTOMStAXSOAPModelBuilder
              */
             builder = new MTOMStAXSOAPModelBuilder(reader, mimeHelper);
-        } else if (mimeHelper.getAttachmentSpecType().equals(
-                MIMEHelper.SWA_TYPE)) {
+        } else if (mimeHelper.getAttachmentSpecType().equals(MIMEHelper.SWA_TYPE)) {
             builder = new StAXSOAPModelBuilder(reader);
         }
         return builder;
@@ -247,8 +244,7 @@
         boolean isOptimized = false;
         while (childrenIter.hasNext() && !isOptimized) {
             OMNode node = (OMNode) childrenIter.next();
-            if (OMNode.TEXT_NODE == node.getType()
-                    && ((OMText) node).isOptimized()) {
+            if (OMNode.TEXT_NODE == node.getType() && ((OMText) node).isOptimized()) {
                 isOptimized = true;
             } else if (OMNode.ELEMENT_NODE == node.getType()) {
                 isOptimized = isOptimised((OMElement) node);
@@ -259,15 +255,13 @@
 
     public static boolean doWriteMTOM(MessageContext msgContext) {
         boolean enableMTOM = false;
-        if (msgContext.getProperty(Constants.Configuration.ENABLE_MTOM) !=
-                null) {
+        if (msgContext.getProperty(Constants.Configuration.ENABLE_MTOM) != null) {
             enableMTOM =
-                    Constants.VALUE_TRUE.equals(
-                            msgContext
-                    .getProperty(Constants.Configuration.ENABLE_MTOM));
+                Constants.VALUE_TRUE.equals(
+                    msgContext.getProperty(Constants.Configuration.ENABLE_MTOM));
         }
-        boolean envelopeContainsOptimise = HTTPTransportUtils
-                .checkEnvelopeForOptimise(msgContext.getEnvelope());
+        boolean envelopeContainsOptimise =
+            HTTPTransportUtils.checkEnvelopeForOptimise(msgContext.getEnvelope());
         boolean doMTOM = enableMTOM && envelopeContainsOptimise;
         msgContext.setDoingMTOM(doMTOM);
         return doMTOM;

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPWorker.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPWorker.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/HTTPWorker.java Wed Jul 20 08:51:50 2005
@@ -38,8 +38,7 @@
     private ConfigurationContext configurationContext;
     private Socket socket;
 
-    public HTTPWorker(ConfigurationContext configurationContext,
-                      Socket socket) {
+    public HTTPWorker(ConfigurationContext configurationContext, Socket socket) {
         this.configurationContext = configurationContext;
         this.socket = socket;
     }
@@ -56,13 +55,14 @@
                 InputStream inStream = socket.getInputStream();
 
                 TransportOutDescription transportOut =
-                        configurationContext.getAxisConfiguration()
-                        .getTransportOut(new QName(Constants.TRANSPORT_HTTP));
+                    configurationContext.getAxisConfiguration().getTransportOut(
+                        new QName(Constants.TRANSPORT_HTTP));
                 msgContext =
-                        new MessageContext(configurationContext,
-                                configurationContext.getAxisConfiguration()
-                        .getTransportIn(new QName(Constants.TRANSPORT_HTTP)),
-                                transportOut);
+                    new MessageContext(
+                        configurationContext,
+                        configurationContext.getAxisConfiguration().getTransportIn(
+                            new QName(Constants.TRANSPORT_HTTP)),
+                        transportOut);
                 msgContext.setServerSide(true);
 
                 //parse the Transport Headers
@@ -71,61 +71,50 @@
 
                 //build a way to write the respone if the Axis choose to do so
 
-                String transferEncoding = (String) map.get(
-                        HTTPConstants.HEADER_TRANSFER_ENCODING);
+                String transferEncoding = (String) map.get(HTTPConstants.HEADER_TRANSFER_ENCODING);
                 if (transferEncoding != null
-                        &&
-                        HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(
-                                transferEncoding)) {
+                    && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(transferEncoding)) {
                     inStream = new ChunkedInputStream(inStream);
-                    out =
-                            new SimpleHTTPOutputStream(
-                                    socket.getOutputStream(), true);
+                    out = new SimpleHTTPOutputStream(socket.getOutputStream(), true);
                 } else {
-                    out =
-                            new SimpleHTTPOutputStream(
-                                    socket.getOutputStream(), false);
+                    out = new SimpleHTTPOutputStream(socket.getOutputStream(), false);
                 }
                 msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
 
                 //This is way to provide Accsess to the transport information to the transport Sender
-                msgContext.setProperty(HTTPConstants.HTTPOutTransportInfo,
-                        new SimpleHTTPOutTransportInfo(out));
+                msgContext.setProperty(
+                    HTTPConstants.HTTPOutTransportInfo,
+                    new SimpleHTTPOutTransportInfo(out));
 
-                if (HTTPConstants.HEADER_GET.equals(
-                        map.get(HTTPConstants.HTTP_REQ_TYPE))) {
+                if (HTTPConstants.HEADER_GET.equals(map.get(HTTPConstants.HTTP_REQ_TYPE))) {
                     //It is GET handle the Get request 
                     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)));
+                        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());
+                            HTTPTransportReceiver.getServicesHTML(configurationContext).getBytes());
                         out.flush();
                     }
                 } else {
                     //It is POST, handle it
-                    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);
+                    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();
@@ -134,13 +123,12 @@
             try {
                 AxisEngine engine = new AxisEngine(configurationContext);
                 if (msgContext != null) {
-                    if (out == null) {
-                        out =
-                                new SimpleHTTPOutputStream(
-                                        socket.getOutputStream(), false);
-                    }
                     msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
-                    engine.handleFault(msgContext, e);
+                    MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                    engine.sendFault(faultContext);
+                } else {
+                    log.error(e);
+                    e.printStackTrace();
                 }
             } catch (Exception e1) {
                 log.error(e1);

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/local/LocalTransportReceiver.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/local/LocalTransportReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/local/LocalTransportReceiver.java Wed Jul 20 08:51:50 2005
@@ -54,23 +54,29 @@
     public void processMessage(InputStream in, EndpointReference to) throws AxisFault {
         try {
             TransportInDescription tIn =
-                    confContext.getAxisConfiguration().getTransportIn(
-                            new QName(Constants.TRANSPORT_LOCAL));
+                confContext.getAxisConfiguration().getTransportIn(
+                    new QName(Constants.TRANSPORT_LOCAL));
             TransportOutDescription tOut =
-                    confContext.getAxisConfiguration().getTransportOut(
-                            new QName(Constants.TRANSPORT_LOCAL));
+                confContext.getAxisConfiguration().getTransportOut(
+                    new QName(Constants.TRANSPORT_LOCAL));
             MessageContext msgCtx = new MessageContext(confContext, tIn, tOut);
             msgCtx.setTo(to);
             msgCtx.setServerSide(true);
 
             XMLStreamReader reader =
-                    XMLInputFactory.newInstance().createXMLStreamReader(
-                            new BufferedReader(new InputStreamReader(in)));
+                XMLInputFactory.newInstance().createXMLStreamReader(
+                    new BufferedReader(new InputStreamReader(in)));
 
             StAXBuilder builder = new StAXSOAPModelBuilder(reader);
-            msgCtx.setEnvelope((SOAPEnvelope) builder.getDocumentElement());
+            SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
+            msgCtx.setEnvelope(envelope);
             AxisEngine engine = new AxisEngine(confContext);
-            engine.receive(msgCtx);
+
+            if (envelope.getBody().hasFault()) {
+                engine.receiveFault(msgCtx);
+            } else {
+                engine.receive(msgCtx);
+            }
         } catch (XMLStreamException e) {
             throw new AxisFault(e);
         } catch (FactoryConfigurationError e) {

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/MailWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/MailWorker.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/MailWorker.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/MailWorker.java Wed Jul 20 08:51:50 2005
@@ -49,7 +49,6 @@
 
     private ConfigurationContext reg = null;
 
-    // Current message
     private MimeMessage mimeMessage;
 
     private Properties prop = new Properties();
@@ -71,60 +70,77 @@
      * The main workhorse method.
      */
     public void doWork() {
-        // create an Axis server
         AxisEngine engine = new AxisEngine(reg);
         MessageContext msgContext = null;
         // create and initialize a message context
         try {
-            TransportInDescription transportIn = reg.getAxisConfiguration()
-                    .getTransportIn(new QName(Constants.TRANSPORT_MAIL));
-            TransportOutDescription transportOut = reg.getAxisConfiguration()
-                    .getTransportOut(new QName(Constants.TRANSPORT_MAIL));
-
-            msgContext = new MessageContext(reg, transportIn, transportOut);
-            msgContext.setServerSide(true);
-            msgContext.setProperty(MailConstants.CONTENT_TYPE,
-                    mimeMessage.getContentType());
-            String soapAction = getMailHeader(MailConstants.HEADER_SOAP_ACTION);
-            msgContext.setWSAAction(soapAction);
-            msgContext.setSoapAction(soapAction);
-
-            String serviceURL = mimeMessage.getSubject();
-            if (serviceURL == null) {
-                serviceURL = "";
-            }
-
-            String replyTo = ((InternetAddress) mimeMessage.getReplyTo()[0]).getAddress();
-            if (replyTo != null) {
-                msgContext.setReplyTo(
-                        new EndpointReference(AddressingConstants.WSA_REPLY_TO,
-                                replyTo));
-            }
-
-            String recepainets = ((InternetAddress) mimeMessage.getAllRecipients()[0]).getAddress();
-            if (recepainets != null) {
-                msgContext.setTo(
-                        new EndpointReference(AddressingConstants.WSA_FROM,
-                                recepainets + "/" + serviceURL));
+            TransportInDescription transportIn =
+                reg.getAxisConfiguration().getTransportIn(new QName(Constants.TRANSPORT_MAIL));
+            TransportOutDescription transportOut =
+                reg.getAxisConfiguration().getTransportOut(new QName(Constants.TRANSPORT_MAIL));
+            if (transportIn != null && transportOut != null) {
+                //create Message Context
+                msgContext = new MessageContext(reg, transportIn, transportOut);
+                msgContext.setServerSide(true);
+                msgContext.setProperty(MailConstants.CONTENT_TYPE, mimeMessage.getContentType());
+                String soapAction = getMailHeader(MailConstants.HEADER_SOAP_ACTION);
+                msgContext.setWSAAction(soapAction);
+                msgContext.setSoapAction(soapAction);
+
+                //Create Mail EPR, EPR is constructed using the format, foo@bar/axis2/services/echo and is constructed 
+                //using the <to-email-address>/<email-subject>
+                InternetAddress[] recepainets = (InternetAddress[]) mimeMessage.getAllRecipients();
+                if (recepainets != null && recepainets.length > 0) {
+                    String emailAddress = recepainets[0].getAddress();
+                    String emailSubject = mimeMessage.getSubject();
+                    EndpointReference to =
+                        new EndpointReference(
+                            AddressingConstants.WSA_TO,
+                            emailAddress + "/" + (emailSubject != null ? emailSubject : ""));
+                } else {
+                    throw new AxisFault("No receptineist found in the Email");
+                }
+                //try to assume the reply to value
+                InternetAddress[] replyToAs = (InternetAddress[]) mimeMessage.getAllRecipients();
+                if (replyToAs != null && replyToAs.length > 0) {
+                    String replyTo = replyToAs[0].getAddress();
+                    if (replyTo != null) {
+                        msgContext.setReplyTo(
+                            new EndpointReference(AddressingConstants.WSA_REPLY_TO, replyTo));
+                    }
+                }
+
+                //Create the SOAP Message
+                //TODO This can we written better way, to use the streams better
+                String message = mimeMessage.getContent().toString();
+                ByteArrayInputStream bais = new ByteArrayInputStream(message.getBytes());
+                XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(bais);
+                StAXBuilder builder = new StAXSOAPModelBuilder(reader);
+                SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
+                msgContext.setEnvelope(envelope);
+                if (envelope.getBody().hasFault()) {
+                    engine.receiveFault(msgContext);
+                } else {
+                    engine.receive(msgContext);
+                }
             } else {
-                throw new AxisFault("No receptineist found in the Email");
+                throw new AxisFault("Unknown transport " + Constants.TRANSPORT_MAIL);
             }
 
-            // add the SOAPEnvelope
-            String message = mimeMessage.getContent().toString();
-            System.out.println("message[" + message + "]");
-            ByteArrayInputStream bais =
-                    new ByteArrayInputStream(message.getBytes());
-            XMLStreamReader reader = XMLInputFactory.newInstance()
-                    .createXMLStreamReader(bais);
-            StAXBuilder builder = new StAXSOAPModelBuilder(reader);
-            msgContext.setEnvelope((SOAPEnvelope) builder.getDocumentElement());
-
-            // invoke the Axis engine
-            engine.receive(msgContext);
         } catch (Exception e) {
-            e.printStackTrace();
-            log.error(e);
+            try {
+
+                if (msgContext != null) {
+                    MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                    engine.sendFault(faultContext);
+                } else {
+                    log.error(e);
+                    e.printStackTrace();
+                }
+            } catch (AxisFault e1) {
+                log.error(e);
+                e1.printStackTrace();
+            }
         }
 
         /*

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/server/MailSorter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/server/MailSorter.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/server/MailSorter.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/mail/server/MailSorter.java Wed Jul 20 08:51:50 2005
@@ -33,7 +33,8 @@
  */
 public class MailSorter {
     Storage st = null;
-    private ArrayList sUsers = new ArrayList(); // Special users. They are hard coded for the time being to axis2-server@localhost and axis2-server@127.0.0.1
+    private ArrayList sUsers = new ArrayList();
+    // Special users. They are hard coded for the time being to axis2-server@localhost and axis2-server@127.0.0.1
     private ConfigurationContext configurationContext = null;
     protected static Log log = LogFactory.getLog(MailSorter.class.getName());
     private boolean actAsMailet = false;
@@ -41,7 +42,7 @@
         this.st = st;
         sUsers.add("axis2-server@localhost");
         sUsers.add("axis2-server@127.0.0.1");
-        if (configurationContext == null){
+        if (configurationContext == null) {
             actAsMailet = false;
         } else {
             this.configurationContext = configurationContext;
@@ -55,33 +56,30 @@
                 processMail(configurationContext, msg);
             } else {
                 st.addMail(user, msg);
-            }            
+            }
         } else {
             st.addMail(user, msg);
         }
 
     }
 
-    public void processMail(ConfigurationContext confContext,
-                            MimeMessage mimeMessage) {
+    public void processMail(ConfigurationContext confContext, MimeMessage mimeMessage) {
         // create an Axis server
         AxisEngine engine = new AxisEngine(confContext);
         MessageContext msgContext = null;
         // create and initialize a message context
         try {
             msgContext =
-                    new MessageContext(confContext,
-                            confContext.getAxisConfiguration().getTransportIn(
-                                    new QName(Constants.TRANSPORT_MAIL)),
-                            confContext.getAxisConfiguration().getTransportOut(
-                                    new QName(Constants.TRANSPORT_MAIL)));
+                new MessageContext(
+                    confContext,
+                    confContext.getAxisConfiguration().getTransportIn(
+                        new QName(Constants.TRANSPORT_MAIL)),
+                    confContext.getAxisConfiguration().getTransportOut(
+                        new QName(Constants.TRANSPORT_MAIL)));
             msgContext.setServerSide(true);
 
-            msgContext.setProperty(MailConstants.CONTENT_TYPE,
-                    mimeMessage.getContentType());
-            msgContext.setWSAAction(
-                    getMailHeader(MailConstants.HEADER_SOAP_ACTION,
-                            mimeMessage));
+            msgContext.setProperty(MailConstants.CONTENT_TYPE, mimeMessage.getContentType());
+            msgContext.setWSAAction(getMailHeader(MailConstants.HEADER_SOAP_ACTION, mimeMessage));
 
             String serviceURL = mimeMessage.getSubject();
             if (serviceURL == null) {
@@ -91,42 +89,44 @@
             String replyTo = ((InternetAddress) mimeMessage.getReplyTo()[0]).getAddress();
             if (replyTo != null) {
                 msgContext.setReplyTo(
-                        new EndpointReference(AddressingConstants.WSA_REPLY_TO,
-                                replyTo));
+                    new EndpointReference(AddressingConstants.WSA_REPLY_TO, replyTo));
             }
 
             String recepainets = ((InternetAddress) mimeMessage.getAllRecipients()[0]).getAddress();
 
-
             if (recepainets != null) {
                 msgContext.setTo(
-                        new EndpointReference(AddressingConstants.WSA_FROM,
-                                recepainets + "/" + serviceURL));
+                    new EndpointReference(
+                        AddressingConstants.WSA_FROM,
+                        recepainets + "/" + serviceURL));
             }
 
             // add the SOAPEnvelope
             String message = mimeMessage.getContent().toString();
             System.out.println("message[" + message + "]");
-            ByteArrayInputStream bais =
-                    new ByteArrayInputStream(message.getBytes());
-            XMLStreamReader reader = XMLInputFactory.newInstance()
-                    .createXMLStreamReader(bais);
+            ByteArrayInputStream bais = new ByteArrayInputStream(message.getBytes());
+            XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(bais);
             StAXBuilder builder = new StAXSOAPModelBuilder(reader);
-            msgContext.setEnvelope((SOAPEnvelope) builder.getDocumentElement());
-            // invoke the Axis engine
-            engine.receive(msgContext);
-        } catch (Exception e) {
-            AxisFault af;
-            if (e instanceof AxisFault) {
-                af = (AxisFault) e;
-                log.debug("Error occured while trying to process the mail.",
-                        af);
+  
+            SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
+            msgContext.setEnvelope(envelope);
+            if (envelope.getBody().hasFault()) {
+                engine.receiveFault(msgContext);
             } else {
-                af = AxisFault.makeFault(e);
+                engine.receive(msgContext);
+            }
+        } catch (Exception e) {
+            try {
+                if (msgContext != null) {
+                    MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                    engine.sendFault(faultContext);
+                }
+            } catch (Exception e1) {
+                log.error(e);
+                e.printStackTrace();
             }
         }
     }
-
 
     private String getMailHeader(String headerName, MimeMessage mimeMessage) throws AxisFault {
         try {

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/tcp/TCPWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/tcp/TCPWorker.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/tcp/TCPWorker.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/tcp/TCPWorker.java Wed Jul 20 08:51:50 2005
@@ -17,10 +17,22 @@
  */
 package org.apache.axis2.transport.tcp;
 
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.net.Socket;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.TransportInDescription;
 import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.AxisFault;
 import org.apache.axis2.om.impl.llom.builder.StAXBuilder;
@@ -29,16 +41,9 @@
 import org.apache.axis2.util.threadpool.AxisWorker;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.net.Socket;
-
+/**
+ * This Class is the work hoarse of the TCP request, this process the incomming SOAP Message.  
+ */
 public class TCPWorker implements AxisWorker {
     protected Log log = LogFactory.getLog(getClass().getName());
     private ConfigurationContext configurationContext;
@@ -52,38 +57,42 @@
     public void doWork() {
         MessageContext msgContext = null;
         try {
-            Reader in = new InputStreamReader(socket.getInputStream());
-            TransportOutDescription transportOut =
-                    configurationContext.getAxisConfiguration()
-                    .getTransportOut(new QName(Constants.TRANSPORT_TCP));
-            msgContext =
-                    new MessageContext(configurationContext,
-                            configurationContext.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(configurationContext);
-            try {
-                XMLStreamReader xmlreader = XMLInputFactory.newInstance()
-                        .createXMLStreamReader(in);
+            AxisConfiguration axisConf = configurationContext.getAxisConfiguration();
+
+            TransportOutDescription transportOut =
+                axisConf.getTransportOut(new QName(Constants.TRANSPORT_TCP));
+            TransportInDescription transportIn =
+                axisConf.getTransportIn(new QName(Constants.TRANSPORT_TCP));
+            if (transportOut != null && transportIn != null) {
+                //create the Message Context and fill in the values
+                msgContext = new MessageContext(configurationContext, transportIn, transportOut);
+                msgContext.setServerSide(true);
+                OutputStream out = socket.getOutputStream();
+                msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
+
+                //create the SOAP Envelope
+                Reader in = new InputStreamReader(socket.getInputStream());
+                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);
+                SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
+                msgContext.setEnvelope(envelope);
+                if (envelope.getBody().hasFault()) {
+                    engine.receiveFault(msgContext);
+                } else {
+                    engine.receive(msgContext);
+                }
+            } else {
+                throw new AxisFault("Unknown transport " + Constants.TRANSPORT_TCP);
             }
-            engine.receive(msgContext);
 
         } catch (Throwable e) {
             try {
                 AxisEngine engine = new AxisEngine(configurationContext);
                 if (msgContext != null) {
-                    msgContext.setProperty(MessageContext.TRANSPORT_OUT,
-                            socket.getOutputStream());
-                    engine.handleFault(msgContext, e);
+                    msgContext.setProperty(MessageContext.TRANSPORT_OUT, socket.getOutputStream());
+                    MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                    engine.sendFault(faultContext);
                 }
             } catch (Exception e1) {
                 log.error(e);

Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis2/engine/EnginePausingTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis2/engine/EnginePausingTest.java?rev=219929&r1=219928&r2=219929&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis2/engine/EnginePausingTest.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis2/engine/EnginePausingTest.java Wed Jul 20 08:51:50 2005
@@ -142,7 +142,7 @@
         }
         engine.receive(mc);
 
-        assertEquals(executedHandlers.size(), 27);
+        assertEquals(27,executedHandlers.size());
         for (int i = 15; i < 27; i++) {
             assertEquals(((Integer) executedHandlers.get(i)).intValue(),
                     i + 1);