[ 
https://issues.apache.org/jira/browse/DELTASPIKE-545?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Thomas Andraschko resolved DELTASPIKE-545.
------------------------------------------

    Resolution: Fixed

> 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
>            Assignee: Thomas Andraschko
>             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)

Reply via email to