[ http://issues.apache.org/jira/browse/MYFACES-739?page=all ]
Mathias Broekelmann closed MYFACES-739:
---------------------------------------
Fix Version: Nightly
Resolution: Fixed
I´ve added a check if parent is null which should fix the NPE.
> Null Pointer Exception
> ----------------------
>
> Key: MYFACES-739
> URL: http://issues.apache.org/jira/browse/MYFACES-739
> Project: MyFaces
> Type: Bug
> Components: Implementation
> Versions: Nightly
> Environment: JBoss
> Reporter: Darren Jensen
> Assignee: Mathias Broekelmann
> Fix For: Nightly
>
> I receive a null pointer exception in the UIViewRoot._broadcastForPhase
> private method.
> This occurs after I manually remove components from the component tree.
> I appears the error is generate because a list iterator is being used for
> removing events from the _events list.
> After I first modifed the code place a try catch around the for statement,
> the events processing was aborted correctly.
> I have made the following changes as a workaround:
> private void _broadcastForPhase(PhaseId phaseId)
> {
> if (_events == null) return;
> boolean abort = false;
> int phaseIdOrdinal = phaseId.getOrdinal();
>
> // DWJ CHANGE BEGIN
> //iterate until until no more events to broadcast
> //we should not use an iterator because because of the
> //ConcurrentModificationException, so use while{} as a workaround
> //To handle possible infinite event queueing
> //capture the original size of the _events list and
> //abort after 10000 iterations
> int currIteration = 0;
> int abortIteration = _events.size() + 10000;
> int itemIdx = 0;
> while (itemIdx < _events.size()){
> FacesEvent event = (FacesEvent) _events.get(itemIdx);
> int ordinal = event.getPhaseId().getOrdinal();
> if (ordinal == ANY_PHASE_ORDINAL ||
> ordinal == phaseIdOrdinal)
> {
> UIComponent source = event.getComponent();
> try {
> source.broadcast(event);
> } catch (AbortProcessingException e) {
> // abort event processing
> // Page 3-30 of JSF 1.1 spec: "Throw an
> AbortProcessingException, to tell the JSF implementation
> // that no further broadcast of this event, or any
> further events, should take place."
> abort = true;
> break;
> }
> }
> _events.remove(itemIdx); //always stay at zero position
> //check for infinite event queueing
> if (currIteration > abortIteration){
> abort = true;
> break;
> }
> currIteration++;
> }
> //DWJ CHANGE END
> if (abort) {
> // TODO: abort processing of any event of any phase or just of
> any event of the current phase???
> clearEvents();
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira