webtier@glassfish.java.net

Re: [webtier] JSF/JSF2 Seemingly random NullPointerExceptions inrequest.get/setAttribute() using Filters

From: Ryan Lubke <Ryan.Lubke_at_Sun.COM>
Date: Mon, 06 Apr 2009 16:32:49 -0700

On 4/6/09 3:18 PM, lincolnbaxter_at_gmail.com wrote:
> Crud, this is probably a tomcat list question. This hasn't happened
> until recently though, and the only thing that's really changed is
> jsf2 versions
Ok, I'm guessing 6.0.18 is what you're still using (based on your older
mails).

I checked the tomcat code and that line/NPE indicates that the current
Context is null.
One possibility for this value being null is something holding a
reference to
the ServletRequest longer than they should be.

My first inclination would be that when the NPE occurs, the current
FacesContext
is an old one that hasn't been properly released.

I haven't dug through your code, but your filter does eventually invoke
the FacesServlet or do you manage the lifecycle calls yourself?


> Sent from my Verizon Wireless BlackBerry
>
> ------------------------------------------------------------------------
> *From*: Ryan Lubke
> *Date*: Mon, 06 Apr 2009 15:16:11 -0700
> *To*: <webtier_at_glassfish.dev.java.net>
> *Subject*: Re: [webtier] JSF/JSF2 Seemingly random
> NullPointerExceptions in request.get/setAttribute() using Filters
> On 4/6/09 3:04 PM, Lincoln Baxter, III wrote:
>> Hi Gurus,
>>
>> Got a question...
> Since it seems that this may be a container issue, what container are
> you using?
>>
>> I'm using PrettyFaces for JSF (trying to update it for JSF2,) and I
>> started getting some NullPointerExceptions that I don't feel like
>> were occurring before.
>>
>> Here are the steps that occur:
>>
>> 1. PrettyFaces intercepts all requests to the WebApp, it checks
>> against a configuration file to determine whether or not that request
>> should be forwarded to JSF.
>>
>> 2. PrettyFaces then constructs a FacesContext in order to do some
>> work with FacesMessages, :
>>
>> public FacesContext getFacesContext(final ServletRequest request,
>> final ServletResponse response)
>> {
>> FacesContext facesContext = FacesContext.getCurrentInstance();
>> if (facesContext != null)
>> {
>> return facesContext;
>> }
>>
>> FacesContextFactory contextFactory = (FacesContextFactory)
>> FactoryFinder
>> .getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
>> LifecycleFactory lifecycleFactory = (LifecycleFactory)
>> FactoryFinder
>> .getFactory(FactoryFinder.LIFECYCLE_FACTORY);
>> Lifecycle lifecycle =
>> lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
>>
>> ServletContext servletContext = ((HttpServletRequest)
>> request).getSession().getServletContext();
>> facesContext = contextFactory.getFacesContext(servletContext,
>> request, response, lifecycle);
>> InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);
>>
>> return facesContext;
>> }
>>
>> 3. PrettyFaces constructs a PrettyContext and PrettyConfig object,
>> and stores them using request.setAttribute()
>>
>> 4. PrettyFaces forwards to JSF (or not, if not applicable)
>>
>> It seems like these attributes are sometimes lost during the forward
>> to the JSF servlet. This must have something to do with threading and
>> forwards, but I can't seem to narrow it down. Any help would be
>> greatly appreciated.
>>
>> Sometimes the Exceptions occur even before the forward to JSF.
>>
>> Caused by: java.lang.NullPointerException
>> at
>> org.apache.catalina.connector.Request.setAttribute(Request.java:1424)
>> at
>> org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503)
>> at
>> javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:284)
>> at
>> com.ocpsoft.pretty.PrettyContext.setCurrentInstance(PrettyContext.java:93)
>> at
>> com.ocpsoft.pretty.PrettyContext.getCurrentInstance(PrettyContext.java:84)
>> at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:58)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> at
>> com.ocpsoft.socialpm.jsf.filter.DataSetupFilter.doFilter(DataSetupFilter.java:255)
>> at
>> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
>> at
>> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> at
>> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
>> at
>> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>> at
>> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
>> at
>> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>>
>>
>> Where and how should I start trying to debug these random NPEs?
>>
>>
>> Thanks,
>> Lincoln
>>
>>
>>
>