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)

Reply via email to