0 Replies Latest reply on Jun 10, 2009 10:58 AM by mattc1

    Moving JSF 1.1 application to 1.2

    mattc1

      We are trying to move our application from a JSF 1.1 based AS to a JSF 1.2 AS. In our current implementation we have the pattern where a XMLHttp browser request is made to a servlet which will try to reference the FacesContext in the service() method. This all worked under 1.1 just fine but when we deploy this to a 1.2 based server we get stack traces like:

      java.lang.NullPointerException
      at org.apache.catalina.connector.Request.setAttribute(Request.java:1443)
      at org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503)
      at com.sun.faces.context.RequestMap.put(ExternalContextImpl.java:1087)
      at com.sun.faces.util.RequestStateManager.getStateMap(RequestStateManager.java:281)
      at com.sun.faces.util.RequestStateManager.set(RequestStateManager.java:223)
      at com.sun.faces.el.FacesCompositeELResolver.setChainType(FacesCompositeELResolver.java:159)
      at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:71)
      at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
      at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
      at com.sun.faces.application.ValueBindingValueExpressionAdapter.getValue(ValueBindingValueExpressionAdapter.java:113)
      at com.salesgene.servlets.tree.TreeNavigationServlet.service(TreeNavigationServlet.java:54)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at com.salesgene.common.filters.UserSessionFilter.doProcessing(UserSessionFilter.java:355)
      at com.salesgene.common.filters.UserSessionFilter.doFilter(UserSessionFilter.java:197)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
      at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
      at java.lang.Thread.run(Thread.java:619)


      This happens in every instance where we try to reference managed beans in a servlet. Oh, and we are getting the FacesContext following this approach:

      LifecycleFactory lifecycleFactory = (LifecycleFactory)
      FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
      Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);

      // Create new FacesContext.
      FacesContextFactory contextFactory = (FacesContextFactory)
      FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
      facesContext = contextFactory.getFacesContext(
      request.getSession().getServletContext(), request, response, lifecycle);

      // Create new View.
      UIViewRoot view = facesContext.getApplication().getViewHandler().createView(
      facesContext, "");
      facesContext.setViewRoot(view);

      // Set current FacesContext.
      FacesContextWrapper.setCurrentInstance(facesContext);


      Anyhelp or advice would be most appreciated!

      -matt