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?






Perhaps, this could be a separate thread.  But while debuging this, I added 

kk

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#a12984727
Sent from the Struts - User mailing list archive at Nabble.com.


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

Reply via email to