Author: ningjiang
Date: Fri Aug 12 14:24:47 2011
New Revision: 1157121

URL: http://svn.apache.org/viewvc?rev=1157121&view=rev
Log:
CXF-3736 Send the cause of exception stack trace

Modified:
    
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java
    
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/GreeterImpl11.java
    
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/Soap11ClientServerTest.java

Modified: 
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java?rev=1157121&r1=1157120&r2=1157121&view=diff
==============================================================================
--- 
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java
 (original)
+++ 
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/AbstractSoapInterceptor.java
 Fri Aug 12 14:24:47 2011
@@ -77,9 +77,16 @@ public abstract class AbstractSoapInterc
             
.getContextualProperty(org.apache.cxf.message.Message.FAULT_STACKTRACE_ENABLED);
         if (config != null && Boolean.valueOf(config).booleanValue() && 
fault.getCause() != null) {
             StringBuilder sb = new StringBuilder();
-            for (StackTraceElement ste : fault.getCause().getStackTrace()) {
-                sb.append(ste.getClassName() + "!" + ste.getMethodName() + "!" 
+ ste.getFileName() + "!"
+            Throwable throwable = fault.getCause();
+            while (throwable != null) {
+                for (StackTraceElement ste : fault.getCause().getStackTrace()) 
{
+                    sb.append(ste.getClassName() + "!" + ste.getMethodName() + 
"!" + ste.getFileName() + "!"
                           + ste.getLineNumber() + "\n");
+                }
+                throwable = throwable.getCause();
+                if (throwable != null) {
+                    sb.append("Caused by:" +  throwable.getClass() + ":" + 
throwable.getMessage() + " ");
+                }
             }
             Element detail = fault.getDetail();
             String soapNamespace = message.getVersion().getNamespace();

Modified: 
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/GreeterImpl11.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/GreeterImpl11.java?rev=1157121&r1=1157120&r2=1157121&view=diff
==============================================================================
--- 
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/GreeterImpl11.java
 (original)
+++ 
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/GreeterImpl11.java
 Fri Aug 12 14:24:47 2011
@@ -47,8 +47,10 @@ public class GreeterImpl11 {
     }
 
     public String sayHi() {
-        // throw the exception out
-        Exception cause = new IllegalArgumentException("Get a wrong name 
<sayHi>");
+        // throw the exception out with some cause
+        Exception cause = new IllegalArgumentException("Get a wrong name 
<sayHi>"
+                                                       , new 
NullPointerException("Test cause."));
+        cause.printStackTrace();
         throw new Fault("sayHiFault", LOG, cause);
     }
 

Modified: 
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/Soap11ClientServerTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/Soap11ClientServerTest.java?rev=1157121&r1=1157120&r2=1157121&view=diff
==============================================================================
--- 
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/Soap11ClientServerTest.java
 (original)
+++ 
cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/soapfault/details/Soap11ClientServerTest.java
 Fri Aug 12 14:24:47 2011
@@ -41,7 +41,7 @@ public class Soap11ClientServerTest exte
     @BeforeClass
     public static void startServers() throws Exception {
         assertTrue("server did not launch correctly",
-                   launchServer(Server11.class));
+                   launchServer(Server11.class, true));
     }
     
     @Test
@@ -52,9 +52,19 @@ public class Soap11ClientServerTest exte
             fail("Should throw Exception!");
         } catch (SOAPFaultException ex) {
             assertEquals("sayHiFault Caused by: Get a wrong name <sayHi>", 
ex.getMessage());
-            StackTraceElement[] element = ex.getCause().getStackTrace();
-            
assertEquals("org.apache.cxf.systest.soapfault.details.GreeterImpl11", 
element[0].getClassName());
-        }
+            StackTraceElement[] elements = ex.getCause().getStackTrace();
+            
assertEquals("org.apache.cxf.systest.soapfault.details.GreeterImpl11", 
+                         elements[0].getClassName());
+            ex.printStackTrace();
+            boolean findNPE = false;
+            for (StackTraceElement element : elements) {
+                if (element.getClassName().startsWith("Caused by:class 
java.lang.NullPointerException: ")) {
+                    findNPE = true;
+                    break;
+                }
+            }
+            assertTrue("Cannot find the Cause of NPE", findNPE);
+        } 
     }
     
 


Reply via email to