Menu

4.0-RC1 Reentrancy in FacesDispatcherServlet

Users
Gonzalad
2007-01-23
2013-04-08
  • Gonzalad

    Gonzalad - 2007-01-23

    Hello,

    I have an error when FacesDispatcherServlet is called twice during the same request (via include or forward or servlet container calling a JSF error page).

    The error is located in :
    LifecycleExecutor.bindHandler :
        protected static void bindHandler(final FacesContext context,
                final Object handler) {
            Assert.notNull(context);
            Assert.notNull(handler);
            Map requestMap = context.getExternalContext().getRequestMap();
            Assert.isNull(requestMap.get(HANDLER));
            requestMap.put(HANDLER, handler);
        }
    Since requestMap.get(HANDLER) si not null, AssertError is generated.

    Thanks for your help !

    Here is my faces-servlet.xml (but I don't think it will be usefull - since it just delegates *.faces calls to jsp pages) :
        <bean name="/*"
            class="org.springframework.web.servlet.mvc.UrlFilenameViewController">
            <property name="prefix" value="/"/>
            <property name="suffix" value=".jsp"/>
        </bean>

    Here is the stack Trace :
    used by: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: [Assertion failed] - the object argument must be null
    Caused by: java.lang.IllegalArgumentException: [Assertion failed] - the object argument must be null
        at org.springframework.util.Assert.isNull(Assert.java:90)
        at org.springframework.util.Assert.isNull(Assert.java:101)
        at de.mindmatters.faces.spring.context.servlet.LifecycleExecutor.bindHandler(LifecycleExecutor.java)
        at de.mindmatters.faces.spring.context.servlet.LifecycleExecutor.handle(LifecycleExecutor.java:235)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:806)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:736)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at de.mindmatters.faces.spring.context.servlet.FacesDispatcherServlet.service(FacesDispatcherServlet.java)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1282)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1239)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:113)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:82)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:670)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:265)
        at com.ibm.ws.webcontainer.webapp.WebApp.sendError(WebApp.java:2546)
        at com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor.findWrapper(JSPExtensionProcessor.java:262)
        at com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor.handleRequest(JSPExtensionProcessor.java:239)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:265)
        at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:416)
        at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
        at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:101)
        at org.apache.shale.tiles.TilesViewHandler.renderView(TilesViewHandler.java:176)
        at org.apache.shale.view.faces.ViewViewHandler.renderView(ViewViewHandler.java:147)
        at de.mindmatters.faces.lifecycle.RenderResponsePhase.executePhase(RenderResponsePhase.java:45)
        at de.mindmatters.faces.lifecycle.AbstractPhase.execute(AbstractPhase.java:37)
        at de.mindmatters.faces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:166)
        at de.mindmatters.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:226)
        at de.mindmatters.faces.spring.context.servlet.FacesView.render(FacesView.java:245)
        at de.mindmatters.faces.spring.context.servlet.FacesView.renderMergedOutputModel(FacesView.java:205)
        at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:249)
        at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:827)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:736)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at de.mindmatters.faces.spring.context.servlet.FacesDispatcherServlet.service(FacesDispatcherServlet.java)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1282)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1239)

     
    • Mike Kienenberger

      Typically, when something is happening twice in a JSF request, the problem has been that the user has added /WEB-INF/faces-config.xml to the javax.faces.CONFIG_FILES web.xml line.  Insure that /WEB-INF/faces-config.xml is not listed in javax.faces.CONFIG_FILES.

          <context-param>
              <param-name>javax.faces.CONFIG_FILES</param-name>
              <param-value></param-value>
              <description>
                  Comma separated list of URIs of (additional) faces config files, excluding /WEB-INF/faces-config.xml
                  (e.g. /WEB-INF/my-config.xml)
                  See JSF 1.0 PRD2, 10.3.2
              </description>
          </context-param>

       
    • Gonzalad

      Gonzalad - 2007-01-23

      Thank you very much for your quick response.

      I've no such parameter in my web.xml.

      The problem is that my JSF page includes another jsf ressource using something like <jsp:include name="sample.faces"/>, and not <jsp:include name="sample.jsp"/>.
      I can handle this if I rename my ressource with jsp suffix.

      I don't know if JSF spec forbids this (I didn't have pbs with myfaces implementation for the moment).

      Another scenario is if I refere to my JSF error page as :
          <error-page>
              <error-code>404</error-code>
              <location>/404.faces</location>
          </error-page>

      and not
          <error-page>
              <error-code>404</error-code>
              <location>/404.jsp</location>
          </error-page>

      I cannot handle by renamiung my error page with jsp suffix (error page can be called without JSF context).

       
      • Mike Kienenberger

        Yes, right after I posted, I re-read your message and realized that the problem probably was not in your web.xml file.

        Unfortunately, I can't help much beyond the knee-jerk answer I gave before -- I use facelets rather than jsp.   I do suspect that the problem is a jsp, spring, or integration problem rather than a JSF problem.

         
    • Andreas Kuhrwahl

      Hi,

      bug will be fixed in 4.0 final which will be released in a few days. An appropriate alternative for your approach is using Spring's HandlerExceptionResolver which can be used with JSF-Spring's SpringMVC integration.

      Regards

      Andy

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.