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)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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>
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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)
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>
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).
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.
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