myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Scott O'Bryan" <sobr...@apache.org>
Subject Re: Facelets: Back button, then nav-link click produces NPE
Date Tue, 17 Jul 2012 23:02:42 GMT
Yeah I think we just got a bug logged on this.  I'll try to have someone
take a look.

On Fri, Jul 6, 2012 at 7:12 AM, Leonardo Uribe <lu4242@gmail.com> wrote:

> 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 <jnthodge@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.
> >
>
>

Mime
View raw message