The strange part about this whole thing is that my logs looks the same, but the UI doesn't forward to the inputForward like it used to.
Matt > -----Original Message----- > From: Matt Raible [mailto:[EMAIL PROTECTED] > Sent: Tuesday, December 09, 2003 9:50 AM > To: [EMAIL PROTECTED] > Subject: ActionExceptionHandler doesn't work with Nightly > Build (does with 1.1) > > > I have an ActionExceptionHandler (see code below) that works > fine with Struts 1.1, but bombs with a nightly build (Nov. > 20th). With Struts 1.1, I get an error on on my input page > that reads: > > The process did not complete. Details should follow. > No row with the given identifier exists: 3, of class: > org.appfuse.persistence.Resume > > With the nightly build I get: > > The process did not complete. Details should follow. > > javax.servlet.ServletException > at > org.apache.struts.action.RequestProcessor.processException(Req > uestProces > sor.java:552) > at > org.apache.struts.action.RequestProcessor.processActionPerform > (RequestPr > ocessor.java:451) > at > org.apache.struts.action.RequestProcessor.process(RequestProce > ssor.java: > 264) > at > org.apache.struts.action.ActionServlet.process(ActionServlet.j > ava:1176) > at > org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:454) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilt > er(Applica > tionFilterChain.java:247) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli > cationFilt > erChain.java:193) > at > org.appfuse.webapp.filter.ActionFilter.doFilter(ActionFilter.java:178) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilt > er(Applica > tionFilterChain.java:213) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli > cationFilt > erChain.java:193) > at > org.appfuse.webapp.filter.CompressionFilter.doFilter(Compressi > onFilter.j > ava:80) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilt > er(Applica > tionFilterChain.java:213) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli > cationFilt > erChain.java:193) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardW > rapperValv > e.java:256) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValv > eContext.i > nvokeNext(StandardPipeline.java:643) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipel > ine.java:4 > 80) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardC > ontextValv > e.java:191) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValv > eContext.i > nvokeNext(StandardPipeline.java:643) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(Aut > henticator > Base.java:553) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValv > eContext.i > nvokeNext(StandardPipeline.java:641) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipel > ine.java:4 > 80) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.catalina.core.StandardContext.invoke(StandardContex > t.java:241 > 7) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHost > Valve.java > :180) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValv > eContext.i > nvokeNext(StandardPipeline.java:643) > at > org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDi > spatcherVa > lve.java:171) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValv > eContext.i > nvokeNext(StandardPipeline.java:641) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReport > Valve.java > :172) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValv > eContext.i > nvokeNext(StandardPipeline.java:641) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipel > ine.java:4 > 80) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEn > gineValve. > java:174) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValv > eContext.i > nvokeNext(StandardPipeline.java:643) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipel > ine.java:4 > 80) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter. > java:193) > at > org.apache.coyote.http11.Http11Processor.process(Http11Process > or.java:78 > 1) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandle > r.processC > onnection(Http11Protocol.java:549) > at > org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoi > nt.java:58 > 9) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run( > ThreadPool > .java:666) > at java.lang.Thread.run(Thread.java:534) > > > Here is the code for my ActionExceptionHandler which is mapped as > follows: > > <exception type="java.lang.Exception" > key="errors.general" > > handler="org.appfuse.webapp.action.ActionExceptionHandler"/> > > > public final class ActionExceptionHandler extends ExceptionHandler { > private Log log = LogFactory.getLog(ActionExceptionHandler.class); > > /** > * This method handles any java.lang.Exceptions that are not > * caught in previous classes. It will loop through and get > * all the causes (exception chain), create ActionErrors, > * add them to the request and then forward to the input. > * > * @see org.apache.struts.action.ExceptionHandler#execute > * ( > * java.lang.Exception, > * org.apache.struts.config.ExceptionConfig, > * org.apache.struts.action.ActionMapping, > * org.apache.struts.action.ActionForm, > * javax.servlet.http.HttpServletRequest, > * javax.servlet.http.HttpServletResponse > * ) > */ > public ActionForward execute(Exception ex, ExceptionConfig ae, > ActionMapping mapping, > ActionForm formInstance, > HttpServletRequest request, > HttpServletResponse response) > throws ServletException { > // if there's already errors in the request, don't process > ActionErrors errors = > (ActionErrors) request.getAttribute(Globals.ERROR_KEY); > > if (errors != null) { > return null; > } > > ActionForward forward = > super.execute(ex, ae, mapping, formInstance, > request, response); > > ActionError error = null; > String property = null; > > // log the exception to the default logger > logException(ex); > // Get the chained exceptions (causes) and add them to the > // list of errors as well > while (ex != null) { > String msg = ex.getMessage(); > log.error(msg); > error = new ActionError("errors.detail", msg); > property = error.getKey(); > ex = (Exception) ex.getCause(); > > if ((ex != null) && (ex.getMessage() != null)) { > // check to see if the child message is the same > // if so, don't store it > if (msg.indexOf(ex.getMessage()) == -1) { > storeException(request, property, error, forward); > } > } else { > storeException(request, property, error, forward); > } > } > > return forward; > } > > /** > * This method overrides the the ExceptionHandler's storeException > * method in order to create more than one error message. > * > * @param request - The request we are handling > * @param property - The property name to use for this error > * @param error - The error generated from the exception mapping > * @param forward - The forward generated from the input > path (from the form or exception mapping) > * @param scope - The scope of the exception mapping. > */ > protected void storeException(HttpServletRequest request, > String property, ActionError error, > ActionForward forward) { > ActionErrors errors = > (ActionErrors) request.getAttribute(Globals.ERROR_KEY); > > if (errors == null) { > errors = new ActionErrors(); > } > > errors.add(property, error); > > request.setAttribute(Globals.ERROR_KEY, errors); > } > protected void logException(Exception ex) { > StringWriter sw = new StringWriter(); > ex.printStackTrace(new PrintWriter(sw)); > log.error(sw.toString()); > } > } > > Should I try a more recent nightly build? > > Matt > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]