Karl Kildén created DELTASPIKE-545:
--------------------------------------
Summary: DeltaSpikeExceptionHandler getRootCause assumes caught
FacesException is wrapping another Exception
Key: DELTASPIKE-545
URL: https://issues.apache.org/jira/browse/DELTASPIKE-545
Project: DeltaSpike
Issue Type: Bug
Components: JSF-Module
Affects Versions: 0.6
Environment: Myfaces 2.2.1 Tomcat 7.x Deltaspike 0.6
Reporter: Karl Kildén
Fix For: 0.7
It may be incorrect by the underlying JSF implementation to not wrap another
exception with FacesException. However errors such as detection of duplicate
id's are in nature FacesExceptions and the opposite could be argued.
Regardless it's best if DeltaspikeExceptionHandler null checks rather then
assuming every FacesException wraps another Exception to ensure robustness.
This is the code Thomas Andraschko proposed as a fix. I have verified it
locally and it fixed my problem.
In DeltaspikeExceptionHandler, override getRootCause:
@Override
public Throwable getRootCause(Throwable throwable)
{
while ((ELException.class.isInstance(throwable) ||
FacesException.class.isInstance(throwable))
&& throwable.getCause() != null)
{
throwable = throwable.getCause();
}
return throwable;
}
Before local fix:
java.lang.IllegalArgumentException: exception must not be null
org.apache.deltaspike.core.api.exception.control.event.ExceptionStackEvent.<init>(ExceptionStackEvent.java:60)
org.apache.deltaspike.core.impl.exception.control.ExceptionHandlerBroadcaster.executeHandlers(ExceptionHandlerBroadcaster.java:75)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces
After:
javax.faces.FacesException: Component with id:info not found
org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.getComponentId(HtmlAjaxBehaviorRenderer.java:461)
org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.build(HtmlAjaxBehaviorRenderer.java:433)
org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.mapToString(HtmlAjaxBehaviorRenderer.java:405)
org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.makeAjax(HtmlAjaxBehaviorRenderer.java:158)
org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer.getScript(HtmlAjaxBehaviorRenderer.java:102)
--
This message was sent by Atlassian JIRA
(v6.2#6252)