After a little fiddling we succeeded to migrate from 2.3.16 to 2.3.20. Everything seemed fine until we had an exception in one action and noticed that something had changed.

Exception thrown from an action got lost. It did not reach the interceptor in charge of exception handling because...

 * The DefaultActionInvocation catched the exception and tried the
   unkownHandlerManager.handleUnknownMethod method.
 * DefaultActionInvocation tried the
   unkownHandlerManager.handleUnknownMethod method because we use the
   struts-convention plugin (same version) and that this plugin define
   the ConventionUnknownHandler bean.
 * Because the ConventionUnkownHandler.handleUnknownActionMethod  does
   not do anything (it return null and has a big comment saying "Not
   used", which is obviously wrong :) ), the result code for the action
   is null.

So we fixed this by adding our own UnkownHandler which throws a NoSuchMethodException which makes the DefaultActionInvocation throw our original exception. Problem solved, but (there is always a but)

1. Maybe somebody could use this patch
2. I do not understand why the "convention" behavior should be to
   ignore action exception and stopping them to spread through the
   interceptor stack as they did
3. I think that this behavior should be changed in the
   DefaultActionInvocation. It feels unnatural to have to throw a
   NoSuchMethodException from an UnkownHandler in order to force the
   DefaultActionInvocation to throw our original exception.


Anyway great release, allot of great improvements. Thanks to all committers for a great release.


--
*Thim Anneessens
IT Department *

ictjob group

Reply via email to