funkman     2003/08/06 17:56:25

  Modified:    catalina/src/share/org/apache/catalina/core
                        ApplicationDispatcher.java
  Log:
  Use PropertyUtils to aggressively get the real rootCause as previously
  committed in StandardWrapperValve and ErrorReportValve
  
  Revision  Changes    Path
  1.23      +26 -12    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java
  
  Index: ApplicationDispatcher.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- ApplicationDispatcher.java        5 Aug 2003 13:22:03 -0000       1.22
  +++ ApplicationDispatcher.java        7 Aug 2003 00:56:25 -0000       1.23
  @@ -97,6 +97,7 @@
   import org.apache.catalina.core.StandardWrapper;
   import org.apache.catalina.util.InstanceSupport;
   import org.apache.catalina.util.StringManager;
  +import org.apache.commons.beanutils.PropertyUtils;
   import org.apache.commons.logging.LogFactory;
   import org.apache.commons.logging.Log;
   
  @@ -630,7 +631,7 @@
               if (queryString != null) {
                   wrequest.setAttribute(Globals.INCLUDE_QUERY_STRING_ATTR,
                                         queryString);
  -             wrequest.setQueryParams(queryString);
  +                wrequest.setQueryParams(queryString);
               }
               
               wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR,
  @@ -774,14 +775,27 @@
               support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT,
                                         servlet, request, response);
               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("applicationDispatcher.serviceException",
                                wrapper.getName()), rootCause);
               servletException = e;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to