jmcnally 2003/07/08 16:53:28 Modified: src/java/org/apache/turbine/exception DefaultExceptionHandler.java * src/java/org/apache/turbine/exception/DefaultExceptionHandler.java - handleException: default to attempting to clean up pull tool resources and execute security logic which occurs in CleanUpValve; if the application does not use the pull service, it will need to define an alternate error handler * src/java/org/apache/turbine/Turbine.java - handleException: execute the error handler in all cases. broke worse case logic in handleException into a new private method handleExceptionHandlerException so that it can be reused. src/java/org/apache/turbine Turbine.java * src/java/org/apache/turbine/exception/DefaultExceptionHandler.java - handleException: default to attempting to clean up pull tool resources and execute security logic which occurs in CleanUpValve; if the application does not use the pull service, it will need to define an alternate error handler * src/java/org/apache/turbine/Turbine.java - handleException: execute the error handler in all cases. broke worse case logic in handleException into a new private method handleExceptionHandlerException so that it can be reused. Log: Revision Changes Path 1.6 +12 -4 jakarta-turbine-3/src/java/org/apache/turbine/exception/DefaultExceptionHandler.java Index: DefaultExceptionHandler.java =================================================================== RCS file: /home/cvs/jakarta-turbine-3/src/java/org/apache/turbine/exception/DefaultExceptionHandler.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- DefaultExceptionHandler.java 10 Sep 2002 14:55:19 -0000 1.5 +++ DefaultExceptionHandler.java 8 Jul 2003 23:53:25 -0000 1.6 @@ -59,6 +59,7 @@ import org.apache.turbine.Turbine; import org.apache.turbine.ValveContext; import org.apache.turbine.pipeline.DefaultTargetValve; +import org.apache.turbine.pipeline.CleanUpValve; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; @@ -83,9 +84,16 @@ data.setStackTrace( ExceptionUtils.getStackTrace( throwable ), throwable ); - // Simulate a minimal Pipeline here to run the target. - - new DefaultTargetValve().invoke(data, new NullValveContext()); + try + { + // Simulate a minimal Pipeline here to run the target. + new DefaultTargetValve().invoke(data, new NullValveContext()); + } + finally + { + // generally pull tools will need to be cleaned up. + new CleanUpValve().invoke(data, new NullValveContext()); + } } /** No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision 1.44 +79 -68 jakarta-turbine-3/src/java/org/apache/turbine/Turbine.java Index: Turbine.java =================================================================== RCS file: /home/cvs/jakarta-turbine-3/src/java/org/apache/turbine/Turbine.java,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- Turbine.java 12 Sep 2002 15:57:06 -0000 1.43 +++ Turbine.java 8 Jul 2003 23:53:26 -0000 1.44 @@ -372,81 +372,92 @@ // make sure that the stack trace makes it the log log.error("handleException: " + t.getMessage(), t); - if ( INTEGRATED.equals(configuration.getString(MODE)) || - req.getAttribute(INTEGRATED_REQUEST_KEY) != null ) + try { - // leave error handling to the invoking application - throw new ServletException(t); + exceptionHandler.handleException( data, t ); } - else + catch (ServletException e) { - try + if ( INTEGRATED.equals(configuration.getString(MODE)) || + req.getAttribute(INTEGRATED_REQUEST_KEY) != null ) { - exceptionHandler.handleException( data, t ); + // let the invoking application deal with it + throw e; } - catch (Exception f) + else { - log.error( "Failed to dispatch to exception handler", f ); - - String mimeType = "text/plain"; - - try - { - // TODO: Make output formatting more flexible -- - // what's below was to remove the use of ECS. - String trace = ExceptionUtils.getStackTrace(t); - data.setStackTrace(trace,t); - data.getResponse().setContentType(data.getContentType()); - data.getResponse().setStatus(data.getStatusCode()); - data.getOut().print("<pre>\n" + trace + "\n</pre>"); - } - // Catch this one because it occurs if some code hasn't been - // completely re-compiled after a change.. - catch ( java.lang.NoSuchFieldError e ) - { - try - { - data.getResponse().setContentType( mimeType ); - data.getResponse().setStatus ( 200 ); - } - catch (Exception ignored) {} - - try - { - data.getOut().print ("java.lang.NoSuchFieldError: " + - "Please recompile all of your " + - "source code."); - } - catch (IOException ignored) {} + handleExceptionHandlerException(data, res, e, t); + } + } + catch (Exception f) + { + handleExceptionHandlerException(data, res, f, t); + } + } - log.info ( data.getStackTrace() ); - log.error ( e.getMessage(), e ); - } - // Attempt to do *something* at this point... - catch ( Throwable reallyScrewedNow ) - { - StringBuffer msg = new StringBuffer(); - msg.append("Horrible Exception: "); - if (data != null) - { - msg.append(data.getStackTrace()); - } - else - { - msg.append(t); - } - try - { - res.setContentType( mimeType ); - res.setStatus ( 200 ); - res.getWriter().print (msg.toString()); - } - catch (Exception ignored) - { - } - log.error(reallyScrewedNow.getMessage(), reallyScrewedNow); - } + private void handleExceptionHandlerException(RunData data, + HttpServletResponse res, + Exception f, + Throwable t) + { + log.error( "Failed to dispatch to exception handler", f ); + + String mimeType = "text/plain"; + try + { + // TODO: Make output formatting more flexible -- + // what's below was to remove the use of ECS. + String trace = ExceptionUtils.getStackTrace(t); + data.setStackTrace(trace,t); + res.setContentType(data.getContentType()); + res.setStatus(data.getStatusCode()); + data.getOut().print("<pre>\n" + trace + "\n</pre>"); + } + // Catch this one because it occurs if some code hasn't been + // completely re-compiled after a change.. + catch ( java.lang.NoSuchFieldError e ) + { + try + { + res.setContentType( mimeType ); + res.setStatus ( 200 ); + } + catch (Exception ignored) {} + + try + { + data.getOut().print ("java.lang.NoSuchFieldError: " + + "Please recompile all of your " + + "source code."); + } + catch (IOException ignored) {} + + log.info ( data.getStackTrace() ); + log.error ( e.getMessage(), e ); + } + // Attempt to do *something* at this point... + catch ( Throwable reallyScrewedNow ) + { + StringBuffer msg = new StringBuffer(); + msg.append("Horrible Exception: "); + if (data != null) + { + msg.append(data.getStackTrace()); + } + else + { + msg.append(t); + } + try + { + res.setContentType( mimeType ); + res.setStatus ( 200 ); + res.getWriter().print (msg.toString()); + } + catch (Exception ignored) + { } + log.error(reallyScrewedNow.getMessage(), reallyScrewedNow); } } No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision No revision
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]