[jboss-user] [JBoss Seam] - JSF Exception handling
Ci
do-not-reply at jboss.com
Tue Nov 14 10:51:22 EST 2006
Hi!
We now have a pretty exception handling in Seam, but JSF exception are falling before the Seam gets the control, so I tried to use one light idea which was said in this forum some time ago.
public class CustomFacesServlet extends HttpServlet {
| ...
| public void service(ServletRequest request, ServletResponse response)
| throws ServletException, IOException
| {
| try {
| delegate.service(request, response);
| } catch (Throwable e) {
| if (!"".equals(errorPage)) {
| // rollback if needed
| rollbackTransactionIfNecessary();
|
| // reconstruct the context for SeamRedirectorFilter
| HttpSession session = ((HttpServletRequest) request).getSession(true);
| PhaseId savedPhaseId = Lifecycle.getPhaseId();
| Lifecycle.setPhaseId(PhaseId.INVOKE_APPLICATION);
| ServletRequest savedRequest = Lifecycle.getServletRequest();
| Lifecycle.setServletRequest(request);
| Lifecycle.beginRequest(getServletContext(), session, request);
| Manager.instance().restoreConversation(request.getParameterMap());
| Lifecycle.resumeConversation(session);
| Manager.instance().handleConversationPropagation(request.getParameterMap());
| // put an exception into SESSION context
| Contexts.getSessionContext().set("exception", e);
|
| ((HttpServletResponse) response).sendRedirect( /* 113 row, see an exception below */
| ((HttpServletRequest) request).getContextPath() + errorPage
| );
| }
| }
| }
| ...
| }
Then, in web.xml:
<!--servlet>
| <servlet-name>Faces Servlet</servlet-name>
| <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
| <load-on-startup>1</load-on-startup>
| </servlet-->
| <servlet>
| <servlet-name>Faces Servlet</servlet-name>
| <servlet-class>qwerty.CustomFacesServlet</servlet-class>
| <init-param>
| <param-name>errorPage</param-name>
| <param-value>/error.seam</param-value>
| </init-param>
| <load-on-startup>1</load-on-startup>
| </servlet>
| <servlet-mapping>
| <servlet-name>Faces Servlet</servlet-name>
| <url-pattern>*.seam</url-pattern>
| </servlet-mapping>
But,
| 18:24:58,739 ERROR [SeamExceptionFilter] uncaught exception handled by Seam
| java.lang.NullPointerException
| at org.jboss.seam.servlet.SeamRedirectFilter.getViewId(SeamRedirectFilter.java:123)
| at org.jboss.seam.servlet.SeamRedirectFilter$1.sendRedirect(SeamRedirectFilter.java:87)
| at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:125)
| at qwerty.CustomFacesServlet.service(CustomFacesServlet.java:113)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:91)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:63)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
| at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
| at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
| at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
| at java.lang.Thread.run(Thread.java:595)
| 18:24:58,770 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
| java.lang.NullPointerException
| at org.jboss.seam.servlet.SeamRedirectFilter.getViewId(SeamRedirectFilter.java:123)
| at org.jboss.seam.servlet.SeamRedirectFilter$1.sendRedirect(SeamRedirectFilter.java:87)
| at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:125)
| at qwerty.CustomFacesServlet.service(CustomFacesServlet.java:113)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:91)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:63)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
| at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
| at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
| at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
| at java.lang.Thread.run(Thread.java:595)
So, what if to change slightly the SeamRedirectFilter?
...
| public static String getViewId(String url)
| {
| if (FacesContext.getCurrentInstance() == null) return null; // added
| //for /seam/* style servlet mappings
| String pathInfo = FacesContext.getCurrentInstance().getExternalContext().getRequestPathInfo();
| ...
Or did I miss something?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3985817#3985817
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3985817
More information about the jboss-user
mailing list