You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ng...@apache.org on 2007/02/05 20:57:46 UTC

svn commit: r503847 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2: AxisFault.java description/OutInAxisOperation.java util/Utils.java

Author: ngallardo
Date: Mon Feb  5 11:57:45 2007
New Revision: 503847

URL: http://svn.apache.org/viewvc?view=rev&rev=503847
Log:
AXIS2-2091

Faults throw to async callback client should include a MessageContext to allow for
further processing of the message.

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/AxisFault.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/AxisFault.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/AxisFault.java?view=diff&rev=503847&r1=503846&r2=503847
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/AxisFault.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/AxisFault.java Mon Feb  5 11:57:45 2007
@@ -20,6 +20,7 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPConstants;
+import org.apache.axiom.soap.SOAPFault;
 import org.apache.axiom.soap.SOAPFaultCode;
 import org.apache.axiom.soap.SOAPFaultDetail;
 import org.apache.axiom.soap.SOAPFaultNode;
@@ -146,7 +147,30 @@
      */
     public AxisFault(SOAPFaultCode soapFaultCode, SOAPFaultReason soapFaultReason,
                      SOAPFaultNode soapFaultNode, SOAPFaultRole soapFaultRole, SOAPFaultDetail soapFaultDetail) {
+        initializeValues(soapFaultCode, soapFaultReason, soapFaultNode, soapFaultRole, soapFaultDetail);
+    }
+    
+    public AxisFault(SOAPFault fault) { 
+        initializeValues(fault);
+    }
+    
+    public AxisFault(SOAPFault fault, MessageContext faultCtx) {
+        initializeValues(fault);
+        faultMessageContext = faultCtx;
+    }
+    
+    private void initializeValues(SOAPFault fault) {
+        if (fault != null) {
+            initializeValues(fault.getCode(), fault.getReason(), fault.getNode(), 
+                    fault.getRole(), fault.getDetail());
+        }        
+    }
 
+    private void initializeValues(SOAPFaultCode soapFaultCode, 
+                                  SOAPFaultReason soapFaultReason, 
+                                  SOAPFaultNode soapFaultNode, 
+                                  SOAPFaultRole soapFaultRole,
+                                  SOAPFaultDetail soapFaultDetail) {
         if (faultElements == null) {
             // assuming that most of the times fault code, fault string and fault details are set
             faultElements = new HashMap(3);
@@ -177,7 +201,7 @@
             faultCode = soapFaultCode.getValue().getTextAsQName();
         }
     }
-
+     
     private void setToElementsListIfNotNull(String soapFaultElementName, OMElement soapFaultElement) {
         if (soapFaultElement != null) {
             faultElements.put(soapFaultElementName, soapFaultElement);

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java?view=diff&rev=503847&r1=503846&r2=503847
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java Mon Feb  5 11:57:45 2007
@@ -379,17 +379,12 @@
                     SOAPEnvelope resenvelope = response.getEnvelope();
                     SOAPBody body = resenvelope.getBody();
                     if (body.hasFault()) {
-                        Exception ex = body.getFault().getException();
-
-                        if (ex != null) {
-                            callback.onError(ex);
-                        } else {
-                            callback.onError(new Exception(body.getFault()
-                                    .getReason().getText()));
-                        }
+                        // If a fault was found, create an AxisFault with a MessageContext so that
+                        // other programming models can deserialize the fault to an alternative form.
+                        AxisFault fault = new AxisFault(body.getFault(), response);
+                        callback.onError(fault);
                     } else {
                         AsyncResult asyncResult = new AsyncResult(response);
-
                         callback.onComplete(asyncResult);
                     }
                 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java?view=diff&rev=503847&r1=503846&r2=503847
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java Mon Feb  5 11:57:45 2007
@@ -379,8 +379,11 @@
                 throw new IllegalArgumentException("The MessageContext does not have an associated SOAPFault.");
             }
             SOAPFault soapFault = envelope.getBody().getFault();
-            result = new AxisFault(soapFault.getCode(), soapFault.getReason(),
-                soapFault.getNode(), soapFault.getRole(), soapFault.getDetail());
+            
+            // The AxisFault returned needs to have the MessageContext set on it so that 
+            // other programming models can potentially handle the fault with an 
+            // alternate deserialization.
+            result = new AxisFault(soapFault, messageContext);
         }
         return result;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org