You are right... I am just trying to catch those rare events. Now here's something crazy: (and I have checked, and double checked, restarted server, etc). BUT if I add a to my action, the exception mapping WORKS. If I take it away, the exception is not caught.
<action name="*" class="com.opensymphony.xwork2.ActionSupport"> bar <interceptor-ref name="exception" /> <interceptor-ref name="defaultStack" /> <result type="velocity">/templates/screens/{1}.vm</result> </action> That works like a charm, remove the foo/bar and I get 500 error. struts.xml file is the same as I posted. Any ideas? Ian Roughley wrote: > > Yes, that's definitely a valid approach. > > I guess the question I have is "how are you using the feature?" It > looks like you are simply providing a pass-through to view a velocity > template that is the same as the action name. Are you expecting the > user to make a request to a template that will not exist? I find that > most of the time, once construction is complete, exceptions such as the > one you are getting are never thrown, because the paths through the site > are well know. > > /Ian > > mikeh96 wrote: >> Thanks for the clarification. Is the solution of extending >> VelocityResult >> and configuring it with a >> template name to return (e.g. 404.vm) if the requested template throws >> the >> ResourceNotFoundException >> a viable one ? Or is there a way to handle this more elegantly ? >> >> thanks again for your time! >> >> mike >> >> >> >> Ian Roughley wrote: >> >>> The result is executed after the interceptors and after the action has >>> executed. Look at the invoke() method on the DefaultActionInvocation >>> class. Therefore, because your exception is in rendering the result, >>> the exception is not managed by the interceptor. If you threw the same >>> exception from within the execute() method of an action, it would be >>> handled as you are expecting. >>> >>> I think this comes down to the reasoning behind the interceptor. I see >>> it as a means to manage the run-time business logic, and not >>> developer-based configuration which will usually be managed during the >>> construction phase. >>> >>> /Ian >>> >>> mikeh96 wrote: >>> >>>> thanks for looking. I pasted the full stack trace below. I am not >>>> using >>>> any home grown action code (yet). This is coming from the >>>> DefaultActionSupport during the rendering stage. >>>> >>>> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348) >>>> >>>> Do I need to subclass and do something in the action.execute() code ? >>>> >>>> >>>> here's the full trace >>>> >>>> org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:458) >>>> org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:341) >>>> at >>>> org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:831) >>>> at >>>> org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:491) >>>> at >>>> org.apache.struts2.dispatcher.VelocityResult.getTemplate(VelocityResult.java:221) >>>> at >>>> org.apache.struts2.dispatcher.VelocityResult.doExecute(VelocityResult.java:150) >>>> at >>>> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178) >>>> at >>>> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348) >>>> at >>>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) >>>> at >>>> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) >>>> at >>>> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504) >>>> at >>>> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) >>>> at >>>> com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:73) >>>> at >>>> com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) >>>> at >>>> com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) >>>> at >>>> com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:73) >>>> at >>>> org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99) >>>> at >>>> com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:73) >>>> at >>>> com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:175) >>>> at >>>> com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:240) >>>> at >>>> com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:263) >>>> at com.caucho.server.port.TcpConnection.run(TcpConnection.java:481) >>>> at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:685) >>>> at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:607) >>>> at java.lang.Thread.run(Thread.java:613) >>>> >>>> >>>> >>>> Ian Roughley wrote: >>>> >>>> >>>>> Is the exception occurring during the call to execute() (or >>>>> equivalent) >>>>> business logic method? This is where the exception handler >>>>> interceptor >>>>> is applied. It seems like the exception you are receiving is from a >>>>> rendering phase outside the execution of the actions logic. >>>>> >>>>> /Ian >>>>> >>>>> >>>>> >>>>> mikeh96 wrote: >>>>> >>>>> >>>>>> Thanks for taking the time.. unfortunately, the exceptions are still >>>>>> percolating up. >>>>>> Do you have it working? >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Brian Trzupek wrote: >>>>>> >>>>>> >>>>>> >>>>>>> I am not 100% sure on this, but I think you need to have >>>>>>> struts.devMode = false in struts.properties. >>>>>>> >>>>>>> Give that a whirl. >>>>>>> >>>>>>> Brian- >>>>>>> >>>>>>> On Sep 30, 2007, at 9:43 PM, mikeh96 wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> I am unable to trap an exception and it's being pushed up until it >>>>>>>> becomes a >>>>>>>> 500 Servlet Exception. >>>>>>>> >>>>>>>> Basically, I want to catch the exception if a user mistypes an >>>>>>>> action name >>>>>>>> >>>>>>>> I am using struts2 (2.0.9). >>>>>>>> >>>>>>>> Here's the top of the trace: >>>>>>>> org.apache.velocity.exception.ResourceNotFoundException: >>>>>>>> Unable to find resource '/templates/screens/inddd2ex.vm' >>>>>>>> at >>>>>>>> org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource( >>>>>>>> ResourceManagerImpl.java:458) >>>>>>>> >>>>>>>> Here's my struts.xml file >>>>>>>> >>>>>>>> (thanks for helping) >>>>>>>> ---------------------------------------------------------------- >>>>>>>> <package name="default" extends="struts-default"> >>>>>>>> >>>>>>>> <interceptors> >>>>>>>> <interceptor-stack name="simpleStack"> >>>>>>>> <interceptor-ref name="defaultStack" /> >>>>>>>> </interceptor-stack> >>>>>>>> </interceptors> >>>>>>>> >>>>>>>> >>>>>>>> <global-results> >>>>>>>> <result name="Exception" type="velocity" >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> /templates/screens/exception.vm</result> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> </global-results> >>>>>>>> >>>>>>>> <global-exception-mappings> >>>>>>>> <exception-mapping >>>>>>>> exception="java.lang.Exception" >>>>>>>> result="Exception"/> >>>>>>>> <exception-mapping >>>>>>>> >>>>>>>> exception="org.apache.velocity.exception.ResourceNotFoundException" >>>>>>>> result="Exception"/> >>>>>>>> <exception-mapping >>>>>>>> exception="java.lang.Runtime" >>>>>>>> result="Exception"/> >>>>>>>> </global-exception-mappings> >>>>>>>> >>>>>>>> >>>>>>>> <action name="*" class="com.opensymphony.xwork2.ActionSupport"> >>>>>>>> <interceptor-ref name="exception" /> >>>>>>>> <interceptor-ref name="defaultStack" /> >>>>>>>> <result type="velocity">/templates/screens/{1}.vm</result> >>>>>>>> </action> >>>>>>>> >>>>>>>> </package> >>>>>>>> ---------------------------------------------------------------------- >>>>>>>> ------ >>>>>>>> -- >>>>>>>> View this message in context: http://www.nabble.com/Struts-2%3A-- >>>>>>>> Unable-to-catch-exceptions-via-global-exception-mappings- >>>>>>>> tf4545971.html#a12972599 >>>>>>>> Sent from the Struts - User mailing list archive at Nabble.com. >>>>>>>> >>>>>>>> >>>>>>>> --------------------------------------------------------------------- >>>>>>>> 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] >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> >>> >> >> > > -- View this message in context: http://www.nabble.com/Struts-2%3A--Unable-to-catch-exceptions-via-global-exception-mappings-tf4545971.html#a12984801 Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]