Hi

The line number does not match with the latest code of ApplicationImpl. But
the code that throws the NullPointerException is this:

    private static SystemEvent _traverseListenerList(List<? extends
SystemEventListener> listeners,
                                                     Class<? extends
SystemEvent> systemEventClass, Object source,
                                                     SystemEvent event)
    {
        if (listeners != null && !listeners.isEmpty())
        {
            // perf: org.apache.myfaces.application.ApplicationImpl.
            //
 SystemListenerEntry.getSpecificSourceListenersNotNull(Class<?>)
            // or javax.faces.component.UIComponent.subscribeToEvent(
            //      Class<? extends SystemEvent>,
ComponentSystemEventListener)
            // creates a ArrayList:
            for (int i  = 0, size = listeners.size(); i < size; i++)
            {
                SystemEventListener listener = listeners.get(i);
                // Call
SystemEventListener.isListenerForSource(java.lang.Object), passing the
source argument.
                // If this returns false, take no action on the listener.
                if (listener.isListenerForSource(source))
                {
                    // Otherwise, if the event to be passed to the listener
instances has not yet been constructed,
                    // construct the event, passing source as the argument
to the one-argument constructor that takes
                    // an Object. This same event instance must be passed
to all listener instances.
                    event = _createEvent(systemEventClass, source, event);

                    // Call
SystemEvent.isAppropriateListener(javax.faces.event.FacesListener), passing
the listener
                    // instance as the argument. If this returns false,
take no action on the listener.
                    if (event.isAppropriateListener(listener))
                    {
                        // Call
SystemEvent.processListener(javax.faces.event.FacesListener), passing the
listener
                        // instance.
                        event.processListener(listener);
                    }
                }
            }
        }

        return event;
    }

There is only one choice: list of listeners has some null elements, which
is invalid. But maybe it could be solved just adding a null check:

                if (listener != null &&
listener.isListenerForSource(source))

In theory it should not happen, the code in MyFaces is correct, but the
null check is harmless. Anyway, the question is why Trinidad returns a
listener list with null values?. It could be a bug into trinidad state
saving algorithm, but without a tests sounds very difficult to solve,
because only occur in a non frequent use case.

regards,

Leonardo Uribe

2012/7/4 jnthodge <jntho...@hotmail.com>:
>
> OK, we've upgraded to 2.1.7 as you suggested, and it has only changed the
> line number that throws this error in ApplicationImpl.java.  Any thoughts?
>
> Thanks much!!
>
> java.lang.NullPointerException
>         at
>
org.apache.myfaces.application.ApplicationImpl._traverseListenerList(ApplicationImpl.java:2355)
>         at
>
org.apache.myfaces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:574)
>         at
>
org.apache.myfaces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:604)
>         at
>
org.apache.myfaces.application.NavigationHandlerImpl$PreDisposeViewCallback.visit(NavigationHandlerImpl.java:237)
>         at
>
org.apache.myfaces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:141)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:539)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:362)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitAllChildren(UIXComponent.java:445)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:423)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:703)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:566)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:362)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitAllChildren(UIXComponent.java:445)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:423)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:703)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:566)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:362)
>         at
>
org.apache.myfaces.trinidad.component.UIXShowOne.visitTree(UIXShowOne.java:135)
>         at
javax.faces.component.UIComponent.visitTree(UIComponent.java:960)
>         at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1159)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitAllChildren(UIXComponent.java:445)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:423)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:703)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:566)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:362)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitAllChildren(UIXComponent.java:445)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:423)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitChildren(UIXComponent.java:703)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:566)
>         at
>
org.apache.myfaces.trinidad.component.UIXComponent.visitTree(UIXComponent.java:362)
>         at
javax.faces.component.UIComponent.visitTree(UIComponent.java:960)
>         at
> javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1159)
>         at
>
org.apache.myfaces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:182)
>         at
>
org.apache.myfaces.trinidadinternal.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:117)
>         at
>
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:161)
>         at
>
org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)
>         at
javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1023)
>         at
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286)
>         at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1360)
>         at
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
>         at
>
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38)
>         at
>
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
>         at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
>         at
>
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
>         at
>
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
>         at
>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
>         at
weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
>         at
>
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
>         at
>
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:293)
>         at
>
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:199)
>         at
>
org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
>         at
>
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
>         at
oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:111)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at
oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:313)
>         at
>
oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413)
>         at
> oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94)
>         at
oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:161)
>         at
oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
>         at
>
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
>         at
oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:136)
>         at
>
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
>         at
>
weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
>         at
>
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
>         at
>
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)
> ...
> --
> View this message in context:
http://old.nabble.com/Facelets%3A-Back-button%2C-then-nav-link-click-produces-NPE-tp33755243p34111380.html
> Sent from the My Faces - Dev mailing list archive at Nabble.com.
>

Reply via email to