Hi,
I'm trying to handle Page Not
Found errors in Cocoon. My sitemap.xsl reads:
<map:pipeline
internal-only="true">
<map:handle-errors type="404"> <map:generate type="serverpages" src="xsp/notfound.xsp"/> <map:serialize status-code="404"/> </map:handle-errors> <map:handle-errors type="500"> <map:generate type="serverpages" src="xsp/notfound.xsp"/> <map:serialize status-code="500"/> </map:handle-errors> <map:match pattern="banner.xml"> <map:generate type="serverpages" src="xsp/banner.xsp"/> <map:serialize type="xml"/> </map:match> <map:match
pattern="login.xml">
<map:generate type="serverpages" src="xsp/login.xsp"/> <map:serialize type="xml"/> </map:match> <map:match
pattern="*.xml">
<map:generate type="serverpages" src="xsp/{1}.xsp"/> <map:serialize type="xml"/> </map:match> <map:match
pattern="*.form">
<map:generate type="serverpages" src="form/{1}.xsp"/> <map:serialize type="xml"/> </map:match> <map:match
pattern="*.view">
<map:generate type="serverpages" src="view/{1}.xsp"/> <map:serialize type="xml"/> </map:match> </map:pipeline>
So if somebody requested view_badpage.html, the
banner.xml is called followed by badpage.view, which maps to view/badpage.xsp,
which doesn't exist. This throws an illegalStateException. The Stack trace
reads:
java.lang.IllegalStateException: Response has already been committed at org.apache.tomcat.facade.HttpServletResponseFacade.sendError(HttpServletResponseFacade.java:204) at org.apache.tomcat.facade.HttpServletResponseFacade.sendError(HttpServletResponseFacade.java:196) at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:672) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404) at org.apache.tomcat.core.Handler.service(Handler.java:286) at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372) at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743) at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210) at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416) at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498) at java.lang.Thread.run(Thread.java:484) I know that its actually Tomcat that throws the exception, because the Reponse has been commited. Is there a way to prevent this happening? Jonathan Downey. |