Return-Path: Delivered-To: apmail-jakarta-tomcat-dev-archive@apache.org Received: (qmail 20057 invoked from network); 5 Aug 2003 18:49:16 -0000 Received: from exchange.sun.com (192.18.33.10) by daedalus.apache.org with SMTP; 5 Aug 2003 18:49:16 -0000 Received: (qmail 23654 invoked by uid 97); 5 Aug 2003 18:51:57 -0000 Delivered-To: qmlist-jakarta-archive-tomcat-dev@nagoya.betaversion.org Received: (qmail 23647 invoked from network); 5 Aug 2003 18:51:57 -0000 Received: from daedalus.apache.org (HELO apache.org) (208.185.179.12) by nagoya.betaversion.org with SMTP; 5 Aug 2003 18:51:57 -0000 Received: (qmail 19166 invoked by uid 500); 5 Aug 2003 18:49:05 -0000 Mailing-List: contact tomcat-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tomcat Developers List" Reply-To: "Tomcat Developers List" Delivered-To: mailing list tomcat-dev@jakarta.apache.org Received: (qmail 19153 invoked by uid 500); 5 Aug 2003 18:49:05 -0000 Received: (qmail 15496 invoked from network); 5 Aug 2003 18:41:45 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 5 Aug 2003 18:41:45 -0000 Received: (qmail 8090 invoked by uid 1671); 5 Aug 2003 18:41:50 -0000 Date: 5 Aug 2003 18:41:50 -0000 Message-ID: <20030805184150.8089.qmail@minotaur.apache.org> From: funkman@apache.org To: jakarta-tomcat-catalina-cvs@apache.org Subject: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core StandardWrapperValve.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N funkman 2003/08/05 11:41:50 Modified: catalina/src/share/org/apache/catalina/valves ErrorReportValve.java catalina/src/share/org/apache/catalina/core StandardWrapperValve.java Log: Experiment: Use PropertyUtils to obtain the rootCause. This way we can also drill into nested JspExceptions or another Throwable object which has a 'rootCause' property which returns a Throwable. Revision Changes Path 1.9 +16 -7 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorReportValve.java Index: ErrorReportValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorReportValve.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ErrorReportValve.java 2 Aug 2003 17:31:04 -0000 1.8 +++ ErrorReportValve.java 5 Aug 2003 18:41:49 -0000 1.9 @@ -95,6 +95,7 @@ import org.apache.catalina.util.ServerInfo; import org.apache.catalina.util.StringManager; +import org.apache.commons.beanutils.PropertyUtils; /** *

Implementation of a Valve that outputs HTML error pages.

@@ -335,10 +336,18 @@ sb.append(stackTrace); sb.append("

"); // In case root cause is somehow heavily nested - if (rootCause instanceof ServletException) - rootCause = ((ServletException) rootCause).getRootCause(); - else + try { + rootCause = (Throwable)PropertyUtils.getProperty + (rootCause, "rootCause"); + } catch (ClassCastException e) { rootCause = null; + } catch (IllegalAccessException e) { + rootCause = null; + } catch (NoSuchMethodException e) { + rootCause = null; + } catch (java.lang.reflect.InvocationTargetException e) { + rootCause = null; + } } sb.append("

"); 1.20 +30 -16 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java Index: StandardWrapperValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- StandardWrapperValve.java 22 Jul 2003 21:01:26 -0000 1.19 +++ StandardWrapperValve.java 5 Aug 2003 18:41:50 -0000 1.20 @@ -82,6 +82,7 @@ import org.apache.catalina.util.StringManager; import org.apache.catalina.valves.ValveBase; import org.apache.tomcat.util.buf.MessageBytes; +import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -145,7 +146,7 @@ HttpRequest hrequest = (HttpRequest) request; Servlet servlet = null; HttpServletRequest hreq = (HttpServletRequest) request.getRequest(); - HttpServletResponse hres = + HttpServletResponse hres = (HttpServletResponse) response.getResponse(); // Check for the application being marked unavailable @@ -157,7 +158,7 @@ // Check for the servlet being marked unavailable if (!unavailable && wrapper.isUnavailable()) { - log(sm.getString("standardWrapper.isUnavailable", + log(sm.getString("standardWrapper.isUnavailable", wrapper.getName())); if (hres == null) { ; // NOTE - Not much we can do generically @@ -232,13 +233,13 @@ (ApplicationFilterFactory.DISPATCHER_TYPE_ATTR, ApplicationFilterFactory.REQUEST_INTEGER); hreq.setAttribute - (ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, + (ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, requestPathMB); // Create the filter chain for this request - ApplicationFilterFactory factory = + ApplicationFilterFactory factory = ApplicationFilterFactory.getInstance(); - ApplicationFilterChain filterChain = - factory.createFilterChain((ServletRequest) request, + ApplicationFilterChain filterChain = + factory.createFilterChain((ServletRequest) request, wrapper, servlet); // Call the filter chain for this request @@ -276,20 +277,33 @@ hres.sendError(HttpServletResponse.SC_NOT_FOUND, sm.getString("standardWrapper.notFound", wrapper.getName())); - } + } // Do not save exception in 'throwable', because we // do not want to do exception(request, response, e) processing } catch (ServletException e) { hreq.removeAttribute(Globals.JSP_FILE_ATTR); Throwable rootCause = e; - while (rootCause instanceof ServletException) { - Throwable t = ((ServletException) rootCause).getRootCause(); - if (t != null) { - rootCause = t; - } else { - break; + Throwable rootCauseCheck = null; + + // Extra aggressive rootCause finding + do { + try { + rootCauseCheck = (Throwable)PropertyUtils.getProperty + (rootCause, "rootCause"); + if (rootCauseCheck!=null) + rootCause = rootCauseCheck; + + } catch (ClassCastException ex) { + rootCauseCheck = null; + } catch (IllegalAccessException ex) { + rootCauseCheck = null; + } catch (NoSuchMethodException ex) { + rootCauseCheck = null; + } catch (java.lang.reflect.InvocationTargetException ex) { + rootCauseCheck = null; } - } + } while (rootCauseCheck != null); + log(sm.getString("standardWrapper.serviceException", wrapper.getName()), rootCause); throwable = e; @@ -464,7 +478,7 @@ } // Don't register in JMX - + public ObjectName createObjectName(String domain, ObjectName parent) throws MalformedObjectNameException { --------------------------------------------------------------------- To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org