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

Leonardo Uribe resolved MYFACES-3877.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2.3

> Add @ListenerFor(systemEventClass = PostRestoreStateEvent.class) causes 
> StackOverflowException on MyFaces 2.2
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3877
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3877
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-344
>    Affects Versions: 2.2.2
>            Reporter: Leonardo Uribe
>            Assignee: Leonardo Uribe
>             Fix For: 2.2.3
>
>
> From MyFaces users list Oleg Varaksin:
> Hello MyFaces team,
> We get a StackOverflowError since MyFaces 2.x. The stack trace is shown here 
> http://forum.primefaces.org/viewtopic.php?f=14&t=36999
> The problem: Wenn we call super.processEvent(event) in the processEvent() of 
> a custom component, we get a recursion which ends in StackOverflowError.
> @Override
> public void processEvent(ComponentSystemEvent event) throws 
> AbortProcessingException {
>     super.processEvent(event);
>     ...
> }
> The call super.processEvent(event) is necessary because e.g. Mojarra executes 
> there some important code. But if we look at processEvent() in the MyFaces' 
> UIComponent, it iterates over all listeners for processEvent() and invokes 
> them. That means, processEvent() of the custom component is invoked again. 
> Does it work as designed or a is it a bug?
> It was working before MyFaces 2.x and it works for all Mojarra versions.
> Thanks in advance.
> The problem was caused by this line:
> @ListenerFor(systemEventClass = PostRestoreStateEvent.class)
> The line is not necessary, because all components are already subscribed to 
> the event by default.
> The code we have in MyFaces is correct from spec perspective. See:
> https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1061
> But a simple check in this part can help to avoid the exception and keep 
> running code that comes from 2.0/2.1. In fact, in 2.0/2.1 the offending line 
> has no effect, but the problem was caused because MyFaces handles the case. 
> It is recommended to remove the offending line from the users code anyway.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to