Author: scheu
Date: Tue Oct 19 15:12:52 2010
New Revision: 1024265

URL: http://svn.apache.org/viewvc?rev=1024265&view=rev
Log:
AXIS2-4857
Contributor:Rich Scheuerle
Summary:
The "caused by exception" is now captured and set during inbound handler 
processing.
Validation tests are added to verify the new code.

Modified:
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java?rev=1024265&r1=1024264&r2=1024265&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java
 Tue Oct 19 15:12:52 2010
@@ -75,6 +75,21 @@ public class HandlerInvokerUtils {
              * context and message are transformed.
              */
             HandlerChainProcessor.convertToFaultMessage(mepMessageCtx, re, 
proto);
+            
+            // Set the Caused By Exception on the MessageContext so that it 
can be obtained in
+            // the JAXWSMessageReceiver
+            if (log.isDebugEnabled()) {
+                log.debug("Runtime Exception detected.  Setting 
causedByException field to " + re);
+            }
+            
+            if (mepMessageCtx.getRequestMessageContext() != null) {
+                
mepMessageCtx.getRequestMessageContext().setCausedByException(new 
AxisFault(re.getMessage(), re));
+            }
+            if (mepMessageCtx.getResponseMessageContext() != null) {
+                
mepMessageCtx.getResponseMessageContext().setCausedByException(new 
AxisFault(re.getMessage(), re));
+            }
+            
+            
             // done invoking inbound handlers, be sure to set the access lock 
flag on the context to true
             mepMessageCtx.setApplicationAccessLocked(true);
             return false;

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java?rev=1024265&r1=1024264&r2=1024265&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java
 Tue Oct 19 15:12:52 2010
@@ -194,11 +194,22 @@ public class JAXWSMessageReceiver implem
 
                         //Rather than create a new AxisFault, we should use 
the AxisFault that was
                         //created at the causedBy
-                        if (responseMsgCtx.getCausedByException() != null)
+                        if (responseMsgCtx.getCausedByException() != null) {
                             faultToReturn = 
responseMsgCtx.getCausedByException();
-                        else {
+                            if (log.isDebugEnabled()) {
+                                log.debug("Setting causedByException from 
response MessageContext");
+                            }
+                        } else if (requestMsgCtx.getCausedByException() != 
null) {
+                            faultToReturn = 
requestMsgCtx.getCausedByException();
+                            if (log.isDebugEnabled()) {
+                                log.debug("Setting causedByException from 
request MessageContext..which indicates an exception occured in the inbound 
handler processing");
+                            }
+                        } else {
                             faultToReturn = new AxisFault("An error was 
detected during JAXWS processing",
                                     axisResponseMsgCtx);
+                            if (log.isDebugEnabled()) {
+                                log.debug("No causedByException detected");
+                            }
                         }
                     } else {
                     //This assumes that we are on the ultimate execution thread


Reply via email to