Author: hiranya
Date: Wed Mar  3 06:03:35 2010
New Revision: 918329

URL: http://svn.apache.org/viewvc?rev=918329&view=rev
Log:
Fixing SYNAPSE-616

Now when the callout mediator encounters an AxisFault, ERROR_CODE, 
ERROR_MESSAGE etc are set properly


Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/CalloutMediator.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java?rev=918329&r1=918328&r2=918329&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
 Wed Mar  3 06:03:35 2010
@@ -370,4 +370,7 @@
     // referring real endpoint is null
     public static final int ENDPOINT_IN_DIRECT_NOT_READY = 305100;
 
+    // callout operation failed
+    public static final int CALLOUT_OPERATION_FAILED    = 401000;
+
 }

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/CalloutMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/CalloutMediator.java?rev=918329&r1=918328&r2=918329&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/CalloutMediator.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/CalloutMediator.java
 Wed Mar  3 06:03:35 2010
@@ -31,10 +31,7 @@
 import org.apache.axis2.client.ServiceClient;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.synapse.ManagedLifecycle;
-import org.apache.synapse.MessageContext;
-import org.apache.synapse.SynapseException;
-import org.apache.synapse.SynapseLog;
+import org.apache.synapse.*;
 import org.apache.synapse.core.SynapseEnvironment;
 import org.apache.synapse.core.axis2.Axis2MessageContext;
 import org.apache.synapse.mediators.AbstractMediator;
@@ -108,7 +105,12 @@
                 }
             }
 
-            OMElement result = sc.sendReceive(request);
+            OMElement result = null;
+            try {
+                result = sc.sendReceive(request);
+            } catch (AxisFault axisFault) {
+                handleFault(synCtx, axisFault);
+            }
 
             if (synLog.isTraceTraceEnabled()) {
                 synLog.traceTrace("Response payload received : " + result);
@@ -147,6 +149,33 @@
         return true;
     }
 
+    private void handleFault(MessageContext synCtx, AxisFault axisFault) {
+        synCtx.setProperty(SynapseConstants.SENDING_FAULT, Boolean.TRUE);
+        if (axisFault.getFaultCodeElement() != null) {
+            synCtx.setProperty(SynapseConstants.ERROR_CODE,
+                    axisFault.getFaultCodeElement().getText());
+        } else {
+            synCtx.setProperty(SynapseConstants.ERROR_CODE,
+                    SynapseConstants.CALLOUT_OPERATION_FAILED);
+        }
+
+        if (axisFault.getFaultReasonElement() != null) {
+            synCtx.setProperty(SynapseConstants.ERROR_MESSAGE,
+                    axisFault.getFaultReasonElement().getText());
+        } else {
+            synCtx.setProperty(SynapseConstants.ERROR_MESSAGE, "Error while 
performing " +
+                    "the callout operation");
+        }
+
+        if (axisFault.getFaultDetailElement() != null) {
+            synCtx.setProperty(SynapseConstants.ERROR_DETAIL,
+                    axisFault.getFaultDetailElement().getText());
+        }
+
+        synCtx.setProperty(SynapseConstants.ERROR_EXCEPTION, axisFault);
+        throw new SynapseException("Error while performing the callout 
operation", axisFault);
+    }
+
     private OMElement getRequestPayload(MessageContext synCtx) throws 
AxisFault {
 
         if (requestKey != null) {


Reply via email to