Author: indika
Date: Wed Oct  1 08:45:23 2008
New Revision: 700817

URL: http://svn.apache.org/viewvc?rev=700817&view=rev
Log:
Remove implicitly setting of fault handler as we always set it explicitly. O.W, 
fault stack always contains default fault sequence based fault handler …this 
case duplicate fault sequence based fault handler (2 fault seqeunce based fault 
handler)or proxy service fault sequence based fault handler + default fault 
sequence based fault handler (unnecessary) 

Correct issue in the logic for cloning fault stack 

Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/tasks/MessageInjector.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java?rev=700817&r1=700816&r2=700817&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
 Wed Oct  1 08:45:23 2008
@@ -198,7 +198,6 @@
         setAxis2MessageContext(axisMsgCtx);
         this.synCfg = synCfg;
         this.synEnv = synEnv;
-        this.pushFaultHandler(new 
MediatorFaultHandler(synCfg.getFaultSequence()));
     }
 
     public EndpointReference getFaultTo() {

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?rev=700817&r1=700816&r2=700817&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
 Wed Oct  1 08:45:23 2008
@@ -116,8 +116,7 @@
                     // fault sequence and the message mediation can still 
continue
                     traceOrDebug(traceOn, "Unable to find fault-sequence : " +
                         proxy.getTargetFaultSequence() + "; using default 
fault sequence");
-                    synCtx.pushFaultHandler(new MediatorFaultHandler(
-                        
synCtx.getSequence(SynapseConstants.FAULT_SEQUENCE_KEY)));
+                    synCtx.pushFaultHandler(new 
MediatorFaultHandler(synCtx.getFaultSequence()));
                 }
 
             } else if (proxy.getTargetInLineFaultSequence() != null) {

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java?rev=700817&r1=700816&r2=700817&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
 Wed Oct  1 08:45:23 2008
@@ -76,8 +76,7 @@
 
         try {
             // set default fault handler
-            synCtx.pushFaultHandler(new MediatorFaultHandler(
-                        
synCtx.getSequence(SynapseConstants.FAULT_SEQUENCE_KEY)));
+            synCtx.pushFaultHandler(new 
MediatorFaultHandler(synCtx.getFaultSequence()));
 
             // invoke synapse message mediation through the main sequence
             synCtx.getEnvironment().injectMessage(synCtx);

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/tasks/MessageInjector.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/tasks/MessageInjector.java?rev=700817&r1=700816&r2=700817&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/tasks/MessageInjector.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/tasks/MessageInjector.java
 Wed Oct  1 08:45:23 2008
@@ -29,6 +29,7 @@
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.audit.AuditHelper;
+import org.apache.synapse.mediators.MediatorFaultHandler;
 import org.apache.synapse.core.SynapseEnvironment;
 import org.apache.synapse.startup.Task;
 import org.apache.synapse.util.PayloadHelper;
@@ -142,10 +143,10 @@
                        return;
 
                }
-        MessageContext mc = synapseEnvironment.createMessageContext();
 
+        MessageContext mc = synapseEnvironment.createMessageContext();
         AuditHelper.setGlobalAudit(mc);
-        
+        mc.pushFaultHandler(new MediatorFaultHandler(mc.getFaultSequence()));
         mc.setTo(new EndpointReference(to));
         if (format == null) {
             PayloadHelper.setXMLPayload(mc, message.cloneOMElement());

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java?rev=700817&r1=700816&r2=700817&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
 Wed Oct  1 08:45:23 2008
@@ -1,14 +1,17 @@
 package org.apache.synapse.util;
-
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.FaultHandler;
+import org.apache.synapse.mediators.eip.EIPConstants;
+import org.apache.synapse.core.axis2.Axis2MessageContext;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPHeader;
+import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.attachments.Attachments;
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPHeader;
-import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
@@ -17,12 +20,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyEngine;
-import org.apache.synapse.FaultHandler;
-import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.core.axis2.Axis2MessageContext;
-import org.apache.synapse.mediators.eip.EIPConstants;
 
 import java.util.*;
 
@@ -31,7 +30,8 @@
  */
 public class MessageHelper {
 
-    private static final Log log = LogFactory.getLog(MessageHelper.class);
+
+    private static Log log = LogFactory.getLog(MessageHelper.class);
 
     /**
      * This method will simulate cloning the message context and creating an 
exact copy of the
@@ -60,7 +60,7 @@
         newCtx.setEnvironment(synCtx.getEnvironment());
         newCtx.setContextEntries(synCtx.getContextEntries());
 
-        // set the parent corelation details to the cloned MC -
+        // set the parent correlation details to the cloned MC -
         //                              for the use of aggregation like tasks
         newCtx.setProperty(EIPConstants.AGGREGATE_CORRELATION, 
synCtx.getMessageID());
 
@@ -73,19 +73,30 @@
 
         // copy all the synapse level properties to the newCtx
         for (Object o : synCtx.getPropertyKeySet()) {
-            // If there are non String keyed properties neglect them rathern 
than trow exception
+            // If there are non String keyed properties neglect them rather 
than trow exception
             if (o instanceof String) {
                 newCtx.setProperty((String) o, synCtx.getProperty((String) o));
             }
         }
-
+        
+        // Make deep copy of fault stack so that parent will not lost it's 
fault stack
         Stack faultStack = synCtx.getFaultStack();
-        FaultHandler faultHandler = (FaultHandler) faultStack.pop();
-        while (faultHandler != null) {
-            newCtx.pushFaultHandler(faultHandler);
-            faultHandler = (FaultHandler) faultStack.pop();
+        if (!faultStack.isEmpty()) {
+            
+            List<FaultHandler> newFaultStack = new ArrayList<FaultHandler>();
+            newFaultStack.addAll(faultStack);
+            
+            for (FaultHandler faultHandler : newFaultStack) {
+                if (faultHandler != null) {
+                    newCtx.pushFaultHandler(faultHandler);
+                }
+            }
         }
 
+        if (log.isDebugEnabled()) {
+            log.info("Parent's Fault Stack : " + faultStack + " : Child's 
Fault Stack :" + newCtx.getFaultStack());
+        }
+        
         return newCtx;
     }
 


Reply via email to