[
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)