You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2007/01/20 03:47:26 UTC
svn commit: r498049 - in /tomcat/container/tc5.5.x:
catalina/src/share/org/apache/catalina/core/StandardWrapper.java
webapps/docs/changelog.xml
Author: markt
Date: Fri Jan 19 18:47:25 2007
New Revision: 498049
URL: http://svn.apache.org/viewvc?view=rev&rev=498049
Log:
Improved patch for 39088 based on patch by Wouter Zelle.
Modified:
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
tomcat/container/tc5.5.x/webapps/docs/changelog.xml
Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardWrapper.java?view=diff&rev=498049&r1=498048&r2=498049
==============================================================================
--- tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardWrapper.java (original)
+++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/core/StandardWrapper.java Fri Jan 19 18:47:25 2007
@@ -28,6 +28,8 @@
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;
@@ -36,6 +38,7 @@
import javax.servlet.ServletResponse;
import javax.servlet.SingleThreadModel;
import javax.servlet.UnavailableException;
+import javax.servlet.jsp.JspException;
import javax.management.ListenerNotFoundException;
import javax.management.MBeanNotificationInfo;
import javax.management.Notification;
@@ -56,7 +59,6 @@
import org.apache.catalina.security.SecurityUtil;
import org.apache.catalina.util.Enumerator;
import org.apache.catalina.util.InstanceSupport;
-import org.apache.tomcat.util.IntrospectionUtils;
import org.apache.tomcat.util.log.SystemLogHandler;
import org.apache.commons.modeler.Registry;
@@ -632,23 +634,33 @@
* @param e The servlet exception
*/
public static Throwable getRootCause(ServletException e) {
- Throwable rootCause = e;
- Throwable rootCauseCheck = null;
- // Extra aggressive rootCause finding
- do {
- try {
- rootCauseCheck = (Throwable)IntrospectionUtils.getProperty
- (rootCause, "rootCause");
- if (rootCause == rootCauseCheck)
- rootCauseCheck = null;
- else if (rootCauseCheck != null)
- rootCause = rootCauseCheck;
+ Throwable rootCause = e.getRootCause();
+ return findRootCause(e, rootCause);
+ }
- } catch (ClassCastException ex) {
- rootCauseCheck = null;
- }
- } while (rootCauseCheck != null);
- 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) {
+ deeperRootCause = theException;
+ } else if (theRootCause instanceof ServletException) {
+ deeperRootCause = ((ServletException) theRootCause).getRootCause();
+ } else if (theRootCause instanceof JspException) {
+ deeperRootCause = ((JspException) theRootCause).getRootCause();
+ } else if (theRootCause instanceof SQLException) {
+ deeperRootCause = ((SQLException) theRootCause).getNextException();
+ } else {
+ deeperRootCause = theRootCause.getCause();
+ }
+
+ return deeperRootCause;
}
Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=498049&r1=498048&r2=498049
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Fri Jan 19 18:47:25 2007
@@ -79,7 +79,8 @@
</fix>
<fix>
<bug>39088</bug>: Prevent infinte loops when an exception is thrown
- that returns itself for getRootCause(). (markt)
+ that returns itself for getRootCause(). Based on a patch by Wouter
+ Zelle. (markt)
</fix>
<fix>
<bug>39436</bug>: Correct MIME type for SVG. (markt)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org