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