Cannot use custom error handler (param org.apache.myfaces.ERROR_HANDLER) due to
bug in FacesServlet
---------------------------------------------------------------------------------------------------
Key: MYFACES-2214
URL: https://issues.apache.org/jira/browse/MYFACES-2214
Project: MyFaces Core
Issue Type: Bug
Components: JSR-252
Affects Versions: 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2
Environment: JRE 1.6.11, Tomcat 6.0.18, myfaces-1.2.6
Reporter: Dirk Möbius
With MYFACES-1685 the possiblity to set a custom error handler has been
introduced with the following init parameters:
org.apache.myfaces.ERROR_HANDLING = true (default)
org.apache.myfaces.ERROR_HANDLER = <class name>
Alas, the current implementation of FacesServlet has a small but fatal bug,
which makes using a custom error handler completely unusable:
In the private method handleQueuedExceptions(FacesContext) in lines 203-204 it
says:
Method m = clazz.getMethod("handleExceptionList", new
Class[]{FacesContext.class,Exception.class});
m.invoke(errorHandler, new Object[]{facesContext, li});
This code finds a method with signature
handleExceptionList(FacesContext,Exception), but invokes it with
(FacesContext,List) parameter instances. This leads to an exception:
IllegalArgumentException: argument type mismatch
The correct code would be:
Method m = clazz.getMethod("handleExceptionList", new
Class[]{FacesContext.class,List.class});
m.invoke(errorHandler, new Object[]{facesContext, li});
Because of this bug it is impossible to create a custom error handler for
exceptions collected in the update model phase. I am unable to see a workaround.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.