Revert port of 39088 as per discussion on dev list.
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 29 Jan 2007 01:45:06 +0000 (01:45 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 29 Jan 2007 01:45:06 +0000 (01:45 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@500918 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/core/StandardWrapper.java
java/org/apache/catalina/valves/ErrorReportValve.java
webapps/docs/changelog.xml

index 159da6b..ed0003e 100644 (file)
@@ -31,8 +31,6 @@ import java.util.Stack;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
-import java.sql.SQLException;
-
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
@@ -293,7 +291,7 @@ public class StandardWrapper
      */
     protected static Properties restrictedServlets = null;
     
-
+    
     // ------------------------------------------------------------- Properties
 
 
@@ -677,37 +675,20 @@ public class StandardWrapper
      * @param e The servlet exception
      */
     public static Throwable getRootCause(ServletException e) {
-        Throwable rootCause = e.getRootCause();
-        return findRootCause(e, rootCause);
+        Throwable rootCause = e;
+        Throwable rootCauseCheck = null;
+        // Extra aggressive rootCause finding
+        int loops = 0;
+        do {
+            loops++;
+            rootCauseCheck = rootCause.getCause();
+            if (rootCauseCheck != null)
+                rootCause = rootCauseCheck;
+        } while (rootCauseCheck != null && (loops < 20));
+        return rootCause;
     }
 
 
-    /*
-     * Work through the root causes using specific methods for well known types
-     * and getCause() for the rest. Stop when the next rootCause is null or
-     * an exception is found that has itself as its own rootCause. 
-     */
-    private static final Throwable findRootCause(Throwable theException,
-            Throwable theRootCause) {
-        
-        Throwable deeperRootCause = null;
-
-        if (theRootCause == null || theRootCause == theException) {
-            return theException;
-        }
-        
-        if (theRootCause instanceof SQLException) {
-            deeperRootCause = ((SQLException) theRootCause).getNextException();
-        }
-        if (deeperRootCause == null) {
-            deeperRootCause = theRootCause.getCause();
-        }
-        
-        return findRootCause(theRootCause, deeperRootCause);
-    }
-
-
-
     /**
      * Refuse to add a child Container, because Wrappers are the lowest level
      * of the Container hierarchy.
index 7560df3..a703add 100644 (file)
@@ -21,7 +21,6 @@ package org.apache.catalina.valves;
 
 import java.io.IOException;
 import java.io.Writer;
-import java.sql.SQLException;
 
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
@@ -217,9 +216,9 @@ public class ErrorReportValve
             sb.append(RequestUtil.filter(stackTrace));
             sb.append("</pre></p>");
 
+            int loops = 0;
             Throwable rootCause = throwable.getCause();
-            Throwable nestedRootCause = null;
-            while (rootCause != null) {
+            while (rootCause != null && (loops < 10)) {
                 stackTrace = getPartialServletStackTrace(rootCause);
                 sb.append("<p><b>");
                 sb.append(sm.getString("errorReportValve.rootCause"));
@@ -227,25 +226,10 @@ public class ErrorReportValve
                 sb.append(RequestUtil.filter(stackTrace));
                 sb.append("</pre></p>");
                 // In case root cause is somehow heavily nested
-                try {
-                    if (rootCause instanceof SQLException) {
-                        nestedRootCause = ((SQLException) rootCause).
-                                getNextException();
-                    }
-                    if (nestedRootCause == null) {
-                        nestedRootCause = rootCause.getCause();
-                    }
-
-                    if (rootCause == nestedRootCause)
-                        rootCause = null;
-                    else {
-                        rootCause = nestedRootCause;
-                        nestedRootCause = null;
-                    }
-                } catch (ClassCastException e) {
-                    rootCause = null;
-                }
+                rootCause = rootCause.getCause();
+                loops++;
             }
+
             sb.append("<p><b>");
             sb.append(sm.getString("errorReportValve.note"));
             sb.append("</b> <u>");
index b5e39e8..5fcab1f 100644 (file)
         web.xml. (markt)
       </fix>
       <fix>
-        <bug>39088</bug>: Port fix from TC5 that improved chances of finding
-        the true root cause. (markt)
-      </fix>
-      <fix>
         <bug>41217</bug>: Set secure attribute on SSO cookie when cookie is
         created during a secure request. Patch provided by Chris Halstead.
         (markt)