You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by as...@apache.org on 2007/03/08 13:27:07 UTC
svn commit: r516021 - in /webservices/synapse/trunk/java:
modules/core/src/main/java/org/apache/synapse/
modules/core/src/main/java/org/apache/synapse/config/xml/
modules/core/src/main/java/org/apache/synapse/core/axis2/
modules/core/src/main/java/org/...
Author: asankha
Date: Thu Mar 8 04:27:05 2007
New Revision: 516021
URL: http://svn.apache.org/viewvc?view=rev&rev=516021
Log:
Fix issues with fault handling, and allow propagation of actual cause to Synapse. Also allow Synapse to send back a fault message through a new MC property named RESPONSE to convert a messages' direction after the changes to the fault mediator
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/FaultHandler.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorFactory.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorSerializer.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AddressEndpoint.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorFaultHandler.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ThreadLocalMessageContext.java
webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/TestMessageContext.java
webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml
webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java Thu Mar 8 04:27:05 2007
@@ -119,6 +119,8 @@
/** Refers the ReplyTo header */
String HEADER_REPLY_TO = "ReplyTo";
+ String RESPONSE = "RESPONSE";
+
/** The tracing state -off */
int TRACING_OFF =0;
/** The tracing state-on */
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/FaultHandler.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/FaultHandler.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/FaultHandler.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/FaultHandler.java Thu Mar 8 04:27:05 2007
@@ -19,19 +19,50 @@
package org.apache.synapse;
+import java.util.Stack;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.io.PrintWriter;
+
/**
- * This is the generic interface for the fault handlers in synapse. In the synapse message context
- * it has a stck of fault handlers and when ever a Synapse (Runtime) Exception has thrown this stack
- * will be examined by one of the SynapseMR, ProxyServiceMR, or CallbackReceiver and faultStack
- * will be poped to get the most relevant FaultHandler and execute the handleFault method.
+ * This is an abstract class that handles an unexpected error during Synapse mediation, but looking
+ * at the stack of registered FaultHanders and invoking on them as appropriate. Sequences and
+ * Endpoints would be Synapse entities that handles faults. If such an entity is unable to handle
+ * an error condition, then a SynapseException should be thrown, which triggers this fault
+ * handling logic.
*/
public abstract class FaultHandler {
public void handleFault(MessageContext synCtx) {
+
try {
onFault(synCtx);
- } catch (SynapseException syne) {
- ((FaultHandler)synCtx.getFaultStack().pop()).handleFault(synCtx);
+
+ } catch (SynapseException e) {
+
+ Stack faultStack = synCtx.getFaultStack();
+ if (faultStack != null && !faultStack.isEmpty()) {
+ ((FaultHandler) faultStack.pop()).handleFault(synCtx);
+ }
+ }
+ }
+
+ public void handleFault(MessageContext synCtx, Exception e) {
+
+ synCtx.setProperty(Constants.ERROR_CODE, "00000"); //TODO not yet defined
+ // use only the first line as the message for multiline exception messages (Axis2 has these)
+ synCtx.setProperty(Constants.ERROR_MESSAGE, e.getMessage().split("\n")[0]);
+ synCtx.setProperty(Constants.ERROR_DETAIL, getStackTrace(e));
+
+ try {
+ onFault(synCtx);
+
+ } catch (SynapseException se) {
+
+ Stack faultStack = synCtx.getFaultStack();
+ if (faultStack != null && !faultStack.isEmpty()) {
+ ((FaultHandler) faultStack.pop()).handleFault(synCtx, se);
+ }
}
}
@@ -41,4 +72,11 @@
* @throws SynapseException in case there is a failure in the fault execution
*/
public abstract void onFault(MessageContext synCtx);
+
+ private static String getStackTrace(Throwable aThrowable) {
+ final Writer result = new StringWriter();
+ final PrintWriter printWriter = new PrintWriter(result);
+ aThrowable.printStackTrace(printWriter);
+ return result.toString();
+ }
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/MessageContext.java Thu Mar 8 04:27:05 2007
@@ -312,6 +312,6 @@
public Stack getFaultStack();
- public void pushFault(FaultHandler fault);
+ public void pushFaultHandler(FaultHandler fault);
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorFactory.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorFactory.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorFactory.java Thu Mar 8 04:27:05 2007
@@ -94,7 +94,7 @@
} else {
n = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "key"));
if (n != null) {
- seqMediator.setRef(n.getAttributeValue());
+ seqMediator.setKey(n.getAttributeValue());
if (e != null) {
String msg = "A sequence mediator swhich a reference to another sequence can not have 'ErrorHandler'";
log.error(msg);
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorSerializer.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SequenceMediatorSerializer.java Thu Mar 8 04:27:05 2007
@@ -99,9 +99,9 @@
Constants.STATISTICS_ATTRIB_NAME, nullNS, statisticsValue));
}
- if (mediator.getRef() != null) {
+ if (mediator.getKey() != null) {
sequence.addAttribute(fac.createOMAttribute(
- "key", nullNS, mediator.getRef()));
+ "key", nullNS, mediator.getKey()));
} else if (mediator.getName() != null) {
sequence.addAttribute(fac.createOMAttribute(
"name", nullNS, mediator.getName()));
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2MessageContext.java Thu Mar 8 04:27:05 2007
@@ -175,7 +175,7 @@
setAxis2MessageContext(axisMsgCtx);
this.synCfg = synCfg;
this.synEnv = synEnv;
- this.pushFault(new MediatorFaultHandler(synCfg.getFaultSequence()));
+ this.pushFaultHandler(new MediatorFaultHandler(synCfg.getFaultSequence()));
}
public EndpointReference getFaultTo() {
@@ -292,6 +292,10 @@
}
public boolean isResponse() {
+ Object o = properties.get(Constants.RESPONSE);
+ if (o != null && o instanceof String && ((String) o).equalsIgnoreCase("true")) {
+ return true;
+ }
return response;
}
@@ -315,7 +319,7 @@
return this.faultStack;
}
- public void pushFault(FaultHandler fault) {
+ public void pushFaultHandler(FaultHandler fault) {
this.faultStack.push(fault);
}
@@ -446,11 +450,5 @@
}
return sb.toString();
- }
-
- public static void setErrorInformation(MessageContext synCtx, SynapseException e) {
- synCtx.setProperty(Constants.ERROR_CODE, "00000"); //TODO not yet defined
- synCtx.setProperty(Constants.ERROR_MESSAGE, e.getMessage());
- synCtx.setProperty(Constants.ERROR_DETAIL, e.getStackTrace().toString());
}
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java Thu Mar 8 04:27:05 2007
@@ -75,7 +75,7 @@
Mediator faultSequence = synCtx.getSequence(proxy.getTargetFaultSequence());
if (faultSequence != null) {
log.debug("setting the fault sequence of the proxy to context");
- synCtx.pushFault(new MediatorFaultHandler(
+ synCtx.pushFaultHandler(new MediatorFaultHandler(
synCtx.getSequence(proxy.getTargetFaultSequence())));
} else {
// when we can not find the reference to the fault sequence of the proxy service we should not
@@ -86,7 +86,7 @@
}
} else if (proxy.getTargetInLineFaultSequence() != null) {
log.debug("Setting the anonymous fault sequence of the proxy to context");
- synCtx.pushFault(new MediatorFaultHandler(proxy.getTargetInLineFaultSequence()));
+ synCtx.pushFaultHandler(new MediatorFaultHandler(proxy.getTargetInLineFaultSequence()));
}
// Using inSequence for the incoming message mediation
@@ -136,8 +136,8 @@
throw new SynapseException("Proxy Service with the name " + name + " does not exists");
}
} catch (SynapseException syne) {
- if(!synCtx.getFaultStack().empty()) {
- ((FaultHandler) synCtx.getFaultStack().pop()).handleFault(synCtx);
+ if (!synCtx.getFaultStack().isEmpty()) {
+ ((FaultHandler) synCtx.getFaultStack().pop()).handleFault(synCtx, syne);
} else {
log.error("Synapse encountered an exception, " +
"No error handlers found - [Message Dropped]\n" + syne.getMessage());
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java Thu Mar 8 04:27:05 2007
@@ -27,11 +27,9 @@
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.Constants;
import org.apache.synapse.FaultHandler;
+import org.apache.synapse.endpoints.Endpoint;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Collections;
-import java.util.Iterator;
+import java.util.*;
public class SynapseCallbackReceiver implements MessageReceiver {
@@ -79,10 +77,21 @@
org.apache.synapse.MessageContext synapseOutMsgCtx) {
if (response.getEnvelope().getBody().hasFault()) {
- Object o = synapseOutMsgCtx.getFaultStack().pop();
- ((FaultHandler) o).handleFault(synapseOutMsgCtx);
+ Stack faultStack = synapseOutMsgCtx.getFaultStack();
+ if (faultStack != null && !faultStack.isEmpty()) {
+ ((FaultHandler) faultStack.pop()).handleFault(
+ synapseOutMsgCtx,
+ response.getEnvelope().getBody().getFault().getException());
+ }
} else {
+
+ // there can always be only one instance of an Endpoint in the faultStack of a message
+ // if the send was successful, so remove it before we proceed any further
+ Stack faultStack = synapseOutMsgCtx.getFaultStack();
+ if (!faultStack.isEmpty() && faultStack.peek() instanceof Endpoint) {
+ faultStack.pop();
+ }
if (log.isDebugEnabled()) {
log.debug("Synapse received an asynchronous response message");
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseMessageReceiver.java Thu Mar 8 04:27:05 2007
@@ -62,8 +62,8 @@
// invoke synapse message mediation
synCtx.getEnvironment().injectMessage(synCtx);
} catch (SynapseException syne) {
- if(!synCtx.getFaultStack().empty()) {
- ((FaultHandler) synCtx.getFaultStack().pop()).handleFault(synCtx);
+ if (!synCtx.getFaultStack().isEmpty()) {
+ ((FaultHandler) synCtx.getFaultStack().pop()).handleFault(synCtx, syne);
} else {
log.error("Synapse encountered an exception, " +
"No error handlers found - [Message Dropped]\n" + syne.getMessage());
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AddressEndpoint.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AddressEndpoint.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AddressEndpoint.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/AddressEndpoint.java Thu Mar 8 04:27:05 2007
@@ -30,6 +30,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.Stack;
+
/**
* This class represents an actual endpoint to send the message. It is resposible for sending the
* message, performing reries if a failure occured and informing the parent endpoint if a failure
@@ -137,7 +139,7 @@
synCtx.setProperty(Constants.OUTFLOW_ADDRESSING_ON, Boolean.TRUE);
}
- synCtx.pushFault(this);
+ synCtx.pushFaultHandler(this);
synCtx.getEnvironment().send(endpoint, synCtx);
}
}
@@ -150,15 +152,17 @@
this.parentEndpoint = parentEndpoint;
}
- public void onFault(MessageContext synCtx) throws SynapseException {
+ public void onFault(MessageContext synCtx) {
// perform retries here
// if this endpoint has actually failed, inform the parent.
if (parentEndpoint != null) {
parentEndpoint.onChildEndpointFail(this, synCtx);
} else {
- Object o = synCtx.getFaultStack().pop();
- ((FaultHandler) o).handleFault(synCtx);
+ Stack faultStack = synCtx.getFaultStack();
+ if (!faultStack.isEmpty()) {
+ ((FaultHandler) faultStack.pop()).handleFault(synCtx);
+ }
}
}
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorFaultHandler.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorFaultHandler.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorFaultHandler.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/MediatorFaultHandler.java Thu Mar 8 04:27:05 2007
@@ -62,7 +62,6 @@
public void onFault(MessageContext synCtx) throws SynapseException {
log.debug("MediatorFaultHandler :: handleFault");
-
this.faultMediator.mediate(synCtx);
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java Thu Mar 8 04:27:05 2007
@@ -25,12 +25,14 @@
import org.apache.synapse.Constants;
import org.apache.synapse.MessageContext;
import org.apache.synapse.SynapseException;
-import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.apache.synapse.mediators.AbstractListMediator;
+import org.apache.synapse.mediators.MediatorFaultHandler;
import org.apache.synapse.statistics.StatisticsUtils;
import org.apache.synapse.statistics.StatisticsStack;
import org.apache.synapse.statistics.impl.SequenceStatisticsStack;
+import java.util.Stack;
+
/**
* The Sequence mediator either refers to a named Sequence mediator instance
* or is a *Named* list/sequence of other (child) Mediators
@@ -45,7 +47,7 @@
private static final Log log = LogFactory.getLog(SequenceMediator.class);
private static final Log trace = LogFactory.getLog(Constants.TRACE_LOGGER);
private String name = null;
- private String ref = null;
+ private String key = null;
private String errorHandler = null;
/** is this definition dynamic */
private boolean dynamic = false;
@@ -69,7 +71,7 @@
public boolean mediate(MessageContext synCtx) {
log.debug("Sequence mediator <" + (name == null ? "anonymous" : name) + "> :: mediate()");
boolean shouldTrace = shouldTrace(synCtx.getTracingState());
- if (ref == null) {
+ if (key == null) {
// Setting Required property to collect the sequence statistics
boolean isStatisticsEnable = (org.apache.synapse.Constants.STATISTICS_ON == statisticsEnable);
if (isStatisticsEnable) {
@@ -86,42 +88,24 @@
if (shouldTrace) {
trace.trace("Start : Sequence <" + (name == null ? "anonymous" : name) + ">");
}
- return super.mediate(synCtx);
-
- } catch (SynapseException e) {
+ // push the errorHandler sequence into the current message as the fault handler
if (errorHandler != null) {
- if (shouldTrace) {
- trace.trace("Sequence " + name + " encountered an exception. " +
- "Locating error handler sequence : " + errorHandler);
- }
- // set exception information to message context
- Axis2MessageContext.setErrorInformation(synCtx, e);
- Mediator errHandler = synCtx.getSequence(errorHandler);
- if (errHandler == null) {
- if (shouldTrace) {
- trace.trace("Sequence " + name + "; error handler sequence named '" +
- errorHandler + "' not found");
- }
- handleException("Error handler sequence mediator instance named " +
- errorHandler + " cannot be found");
- } else {
- if (shouldTrace) {
- trace.trace("Sequence " + name + "; Executing error handler sequence : "
- + errorHandler);
- }
- return errHandler.mediate(synCtx);
- }
-
- } else {
- if (shouldTrace) {
- trace.trace("Sequence " + name + " encountered an exception, but does " +
- "not specify an error handler");
- }
- throw e;
+ synCtx.pushFaultHandler(
+ new MediatorFaultHandler(synCtx.getSequence(errorHandler)));
}
+ return super.mediate(synCtx);
+
} finally {
+
+ // pop our error handler from the fault stack if we pushed it
+ Stack faultStack = synCtx.getFaultStack();
+ if (errorHandler != null && !faultStack.isEmpty() &&
+ synCtx.getSequence(errorHandler).equals(faultStack.peek())) {
+ faultStack.pop();
+ }
+
//If this sequence is finished it's task normally
if (isStatisticsEnable) {
StatisticsUtils.processSequenceStatistics(synCtx);
@@ -134,15 +118,15 @@
}
} else {
- Mediator m = synCtx.getSequence(ref);
+ Mediator m = synCtx.getSequence(key);
if (m == null) {
if (shouldTrace) {
- trace.trace("Sequence named " + ref + " cannot be found.");
+ trace.trace("Sequence named " + key + " cannot be found.");
}
- handleException("Sequence named " + ref + " cannot be found.");
+ handleException("Sequence named " + key + " cannot be found.");
} else {
if (shouldTrace) {
- trace.trace("Executing sequence named " + ref);
+ trace.trace("Executing sequence named " + key);
}
return m.mediate(synCtx);
}
@@ -163,12 +147,12 @@
this.name = name;
}
- public String getRef() {
- return ref;
+ public String getKey() {
+ return key;
}
- public void setRef(String ref) {
- this.ref = ref;
+ public void setKey(String key) {
+ this.key = key;
}
public String getErrorHandler() {
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/FaultMediator.java Thu Mar 8 04:27:05 2007
@@ -21,6 +21,7 @@
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMDocument;
+import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.xpath.AXIOMXPath;
import org.apache.axiom.soap.*;
import org.apache.axis2.AxisFault;
@@ -129,8 +130,13 @@
Iterator iter = synCtx.getEnvelope().getHeader().examineAllHeaderBlocks();
if (iter.hasNext()) {
while (iter.hasNext()) {
- SOAPHeaderBlock header = (SOAPHeaderBlock) iter.next();
- faultEnvelope.getHeader().addChild(header);
+ Object o = iter.next();
+ if (o instanceof SOAPHeaderBlock) {
+ SOAPHeaderBlock header = (SOAPHeaderBlock) o;
+ faultEnvelope.getHeader().addChild(header);
+ } else if (o instanceof OMElement) {
+ faultEnvelope.getHeader().addChild((OMElement) o);
+ }
}
}
log.debug("The fault message as : " + fault);
Modified: webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContext.java Thu Mar 8 04:27:05 2007
@@ -256,7 +256,7 @@
return null;
}
- public void pushFault(FaultHandler fault) {
+ public void pushFaultHandler(FaultHandler fault) {
}
public MessageContext getSynapseContext() {
Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ScriptMessageContext.java Thu Mar 8 04:27:05 2007
@@ -275,8 +275,8 @@
return mc.getFaultStack();
}
- public void pushFault(FaultHandler fault) {
- mc.pushFault(fault);
+ public void pushFaultHandler(FaultHandler fault) {
+ mc.pushFaultHandler(fault);
}
}
Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ThreadLocalMessageContext.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ThreadLocalMessageContext.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ThreadLocalMessageContext.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/bsf/ThreadLocalMessageContext.java Thu Mar 8 04:27:05 2007
@@ -269,7 +269,7 @@
return getMC().getFaultStack();
}
- public void pushFault(FaultHandler fault) {
- getMC().pushFault(fault);
+ public void pushFaultHandler(FaultHandler fault) {
+ getMC().pushFaultHandler(fault);
}
}
Modified: webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/TestMessageContext.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/TestMessageContext.java?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/TestMessageContext.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/test/java/org/apache/synapse/TestMessageContext.java Thu Mar 8 04:27:05 2007
@@ -270,7 +270,7 @@
return null;
}
- public void pushFault(FaultHandler fault) {
+ public void pushFaultHandler(FaultHandler fault) {
return;
}
}
Modified: webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml (original)
+++ webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml Thu Mar 8 04:27:05 2007
@@ -17,71 +17,71 @@
~ under the License.
-->
-<synapse xmlns="http://ws.apache.org/ns/synapse">
+<!-- introduction to error handling -->
+<definitions xmlns="http://ws.apache.org/ns/synapse">
- <!-- illustration of various mediators : try-catch-finally and makefault mediators -->
- <definitions>
-
- <!-- define an endpoint for the stock quote service -->
- <endpoint name="simple">
- <address uri="http://localhost:9000/axis2/services/SimpleStockQuoteService"/>
- </endpoint>
-
- <!-- define a non-existent endpoint to test error handling -->
- <endpoint name="bogus">
- <address uri="http://localhost:9009/axis2/services/NonExistentStockQuoteService"/>
- </endpoint>
-
- <!-- define a sequence to be used for error handling -->
- <sequence name="errorHandler">
-
- <!-- Log the error -->
- <log level="custom">
- <property name="text" value="An unexpected error occured"/>
- <property name="message" expression="get-property('ERROR_MESSAGE')"/>
- <property name="detail" expression="get-property('ERROR_DETAIL')"/>
- </log>
-
- <!-- create a custom fault message -->
- <makefault>
- <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
- <reason expression="get-property('ERROR_MESSAGE')"/>
- </makefault>
-
- <send/>
- </sequence>
- </definitions>
-
- <rules>
-
- <try>
- <sequence>
- <switch source="//m0:getQuote/m0:request/m0:symbol"
- xmlns:m0="http://services.samples/xsd">
- <case regex="IBM">
- <send>
- <endpoint ref="simple"/>
- </send>
- </case>
- <case regex="MSFT">
- <send>
- <endpoint ref="bogus"/>
- </send>
- </case>
- </switch>
- </sequence>
- <onError>
- <sequence ref="errorHandler"/>
- </onError>
- <finally>
- <log level="custom">
- <property name="message" value="Processed request"/>
- </log>
- </finally>
- </try>
+ <!-- define an endpoint for the stock quote service -->
+ <endpoint name="simple">
+ <address uri="http://localhost:9000/axis2/services/SimpleStockQuoteService"/>
+ </endpoint>
+
+ <!-- define a non-existent host to test error handling (runtime exception for invalid host)-->
+ <endpoint name="bogusHost">
+ <address uri="http://bogus:9000/axis2/services/NonExistentStockQuoteService"/>
+ </endpoint>
+
+ <!-- define a non-existent port to test error handling (error handling) -->
+ <endpoint name="bogusPort">
+ <address uri="http://localhost:9009/axis2/services/NonExistentStockQuoteService"/>
+ </endpoint>
+
+ <!-- the default fault handling sequence used by Synapse - named 'fault' -->
+ <sequence name="fault">
+ <!-- Log the error -->
+ <log level="custom">
+ <property name="text" value="An unexpected error occured"/>
+ <property name="message" expression="get-property('ERROR_MESSAGE')"/>
+ <!--<property name="detail" expression="get-property('ERROR_DETAIL')"/>-->
+ </log>
+
+ <!-- create a custom fault message -->
+ <makefault>
+ <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
+ <reason expression="get-property('ERROR_MESSAGE')"/>
+ </makefault>
+ <property name="RESPONSE" value="true"/>
+ <header name="To" expression="get-property('ReplyTo')"/>
<send/>
+ </sequence>
+
+ <!-- default message handling sequence used by Synapse - named 'main' -->
+ <sequence name="main">
+ <in>
+ <switch source="//m0:getQuote/m0:request/m0:symbol"
+ xmlns:m0="http://services.samples/xsd">
+ <case regex="IBM">
+ <send>
+ <endpoint key="simple"/>
+ </send>
+ </case>
+ <case regex="MSFT">
+ <send>
+ <endpoint key="bogusHost"/>
+ </send>
+ </case>
+ <case regex="SUN">
+ <send>
+ <endpoint key="bogusPort"/>
+ </send>
+ </case>
+ </switch>
+ <drop/>
+ </in>
- </rules>
+ <out>
+ <send/>
+ </out>
+ </sequence>
-</synapse>
\ No newline at end of file
+</definitions>
Modified: webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html?view=diff&rev=516021&r1=516020&r2=516021
==============================================================================
--- webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html (original)
+++ webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html Thu Mar 8 04:27:05 2007
@@ -461,71 +461,76 @@
<h2><a name="Sample4">HERE___</a></h2>
<h2><a name="Sample41" id="Sample41">Sample 4:</a></h2>
-<pre><synapse xmlns="http://ws.apache.org/ns/synapse">
+<pre><!-- introduction to error handling -->
+<definitions xmlns="http://ws.apache.org/ns/synapse">
- <!-- illustration of various mediators : try-catch-finally and makefault mediators -->
- <definitions>
+ <!-- define an endpoint for the stock quote service -->
+ <endpoint name="simple">
+ <address uri="http://localhost:9000/axis2/services/SimpleStockQuoteService"/>
+ </endpoint>
+
+ <!-- define a non-existent host to test error handling (runtime exception for invalid host)-->
+ <endpoint name="bogusHost">
+ <address uri="http://bogus:9000/axis2/services/NonExistentStockQuoteService"/>
+ </endpoint>
+
+ <!-- define a non-existent port to test error handling (error handling) -->
+ <endpoint name="bogusPort">
+ <address uri="http://localhost:9009/axis2/services/NonExistentStockQuoteService"/>
+ </endpoint>
+
+ <!-- the default fault handling sequence used by Synapse - named 'fault' -->
+ <sequence name="fault">
+ <!-- Log the error -->
+ <log level="custom">
+ <property name="text" value="An unexpected error occured"/>
+ <property name="message" expression="get-property('ERROR_MESSAGE')"/>
+ <!-- # pick stack trace # <property name="detail" expression="get-property('ERROR_DETAIL')"/>-->
+ </log>
+
+ <!-- create a custom fault message -->
+ <makefault>
+ <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
+ <reason expression="get-property('ERROR_MESSAGE')"/>
+ </makefault>
- <!-- define an endpoint for the stock quote service -->
- <endpoint name="simple"
- address="http://localhost:9000/axis2/services/SimpleStockQuoteService"/>
-
- <!-- define a non-existent endpoint to test error handling -->
- <endpoint name="bogus"
- address="http://localhost:9009/axis2/services/NonExistentStockQuoteService"/>
-
- <!-- define a sequence to be used for error handling -->
- <sequence name="errorHandler">
-
- <!-- Log the error -->
- <log level="custom">
- <property name="text" value="An unexpected error occured"/>
- <property name="message" expression="get-property('ERROR_MESSAGE')"/>
- <property name="detail" expression="get-property('ERROR_DETAIL')"/>
- </log>
-
- <!-- create a custom fault message -->
- <makefault>
- <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
- <reason expression="get-property('ERROR_MESSAGE')"/>
- </makefault>
-
- <send/>
- </sequence>
- </definitions>
+ <property name="RESPONSE" value="true"/>
+ <header name="To" expression="get-property('ReplyTo')"/>
+ <send/>
+ </sequence>
- <rules>
+ <!-- default message handling sequence used by Synapse - named 'main' -->
+ <sequence name="main">
+ <in>
+ <switch source="//m0:getQuote/m0:request/m0:symbol"
+ xmlns:m0="http://services.samples/xsd">
+ <case regex="IBM">
+ <send>
+ <endpoint key="simple"/>
+ </send>
+ </case>
+ <case regex="MSFT">
+ <send>
+ <endpoint key="bogusHost"/>
+ </send>
+ </case>
+ <case regex="SUN">
+ <send>
+ <endpoint key="bogusPort"/>
+ </send>
+ </case>
+ </switch>
+ <drop/>
+ </in>
- <try>
- <sequence>
- <switch source="//m0:getQuote/m0:request/m0:symbol"
- xmlns:m0="http://services.samples/xsd">
- <case regex="IBM">
- <send>
- <endpoint ref="simple"/>
- </send>
- </case>
- <case regex="MSFT">
- <send>
- <endpoint ref="bogus"/>
- </send>
- </case>
- </switch>
- </sequence>
- <onError>
- <sequence ref="errorHandler"/>
- </onError>
- <finally>
- <log level="custom">
- <property name="message" value="Processed request"/>
- </log>
- </finally>
- </try>
+ <out>
+ <send/>
+ </out>
+ </sequence>
- <send/>
+</definitions>
- </rules>
-</synapse> </pre>
+ </pre>
<p><strong>Objective: Introduction to error handling with the try and
makefault mediators</strong></p>
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org