Hi,
This design have been chosen in order to not penalize an entire page when only one tile fail. With this design, the page is shown correctly, and the faulty tile report an error.
What is missing in this design is a way to customize what should happen in case of error. This is an enhancement request to be added to bugzilla (or vote for it if it already exist).
Cedric
Jörg Maurer wrote:
Wondering why i have no chance to catch any exception i did some
investigation on that topic , so i consulted the java logic of your
insert tag. it is that ~good~ shielded against any exception bubbling,
that my own error handler logic never gets a chance because ALL
EXCEPTIONS HAVE BEEN CAUGTH AND NEVER RETHROWN. next is snip from your
Insert Tag(commented out is your code, underneath that is what i want -
throw new JspException(ex.getMessage())) :
} catch (ServletException ex) {
Throwable realEx = ex;
if (ex.getRootCause() != null) {
realEx = ex.getRootCause();
}
// processException(
// realEx,
// "[ServletException in:" + page +
"] " + realEx.getMessage() + "'");
throw new JspException(ex.getMessage());
} catch (Exception ex) {
// processException(ex, "[Exception in:" +
page + "] " + ex.getMessage());
throw new JspException(ex.getMessage());
} finally {
// restore old context
// done only if currentContext not null
(bug with Silverstream ?; related by Arvindra Sehmi 20010712)
if (currentContext != null)
pageContext.setAttribute(
ComponentConstants.COMPONENT_CONTEXT,
currentContext,
pageContext.REQUEST_SCOPE);
}
return EVAL_PAGE;
Looking at Geary´s template insert tag, he always chose to do "throw new JspException(ex.getMessage());".
Your logic displays by default a simple stack trace(Exception type and
exception message) of where the tile should be. I dont want to show that
to my customer, but as i said, i have no change to display my jsp-error
page instead.
So if that "feature" is not here for any other reason, i consider that being a unlucky design for me, because i have to at least vesion my own tiles.jar or do some dirty subclassing your tag.
I would appreciate your comment.
Greets Jörg
-----Original Message----- From: Cedric Dumoulin [mailto:[EMAIL PROTECTED] Sent: Donnerstag, 06. März 2003 11:57 To: Struts Users Mailing List Subject: Re: how to catch exception using tiles thrown by e.g. org.apache.struts.tiles.TilesUtilStrutsModulesImpl.doInclude
Jörg Maurer wrote:
try.exactly as you said, <insert> is used. despite the big try-catch blockCedric
approach, its unclear to me why error-page in web.xml doesn#t get a
Additionally i searched for similar behaviour and all i found wasThis make sense: Your page is made of several tiles. The first ones have already been compute, and so some outputs have been flushed. Then, one of the <insert ..> throw an exception. This exception is not catched
following "page 52 of the JSP 1.2 spec : Note: if autoFlush=true then if the contents of the initial Jsp-
Writer has been flushed to the ServletResponse output stream
then any subsequent attempt to dispatch an uncaught
exception from the offending page to an errorPage may fail.
When an error page is also indicated in the web.xml
descriptor, the JSP error page applies first, then the web.xml
page.".
You as a more experienced one than myself, does it make some sense to the issue?
by the jsp mechanism because the output stream has already been flushed ...
Cedric
in-----Original Message----- From: Cedric Dumoulin [mailto:[EMAIL PROTECTED] Sent: Dienstag, 04. März 2003 18:35 To: Struts Users Mailing List Subject: Re: how to catch exception using tiles thrown by e.g. org.apache.struts.tiles.TilesUtilStrutsModulesImpl.doInclude
I suppose that your exception is thrown by a <tiles:insert ...> tag
a jsp.exception
This exception is thrown by the tiles framework, which know nothing about the struts exception mechanism, so it can't be used. The
is then propagated by the tag handler and reach the jsp page (the tile jsp). If there is an exception handler associated to the jsp, it is called, if there is no handler, the exception is propagated to parent page inserting this one. If the parent page have inserted the childpage
with an <insert ...>, then the <insert> catch the exception and showit.
Normally, the jsp exception handling should work, but it appear that it
is not always the case.handler
A workaround is to put a big try/catch in the jsp throwing the exception ;-(. This will be improved in future versions.
Cedric
Jörg Maurer wrote:
Hi struts people!
I have really defined everywhere i think i can put an exception
stackfor servlet exception : 1.) in my base layout.jsp an <%@
errorPage='/pages/common/error/errorsGeneralHandler.jsp'%>
2.) in struts config a global exception handler
<global-exceptions>
<exception path="pages/common/error/errorsGeneralHandler.jsp"
type="javax.servlet.ServletException"/> </global-exceptions> 3.) in web.xml
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/pages/common/error/errorsGeneralHandler.jsp</location>
</error-page>
Still ServletException slip through my guards. Last know point as
Strace shows below is
org.apache.struts.tiles.TilesUtilStrutsModulesImpl.doInclude(TilesUtil
rt
rutsModulesImpl.java:122) , which throws ServletException but is neverhandler.
catchable to me. The point is not the FileNotFound, which is pretty
clear to me, but why such exception doesn´t hit any of my error
Any hints appreciated!
2003-03-04 12:36:06 ApplicationDispatcher[] Servlet.service() for
servlet jsp threw exception
javax.servlet.ServletException: /pages/wf_category/pager_region.jsp
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletW
ia
pper.service(IDEJspServlet.java:183)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.serviceJspF
Jl
e(IDEJspServlet.java:246)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.service(IDE
ts
pServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
sc
her.java:683)
at
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDi
ap
atcher.java:574)
at
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDisp
jt
cher.java:497)
at
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.
ta
va:819)
at
org.apache.jsp.wf_0005fcategory_0005fchoose$jsp._jspService(wf_0005fca
re
gory_0005fchoose$jsp.java:107)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletW
ia
pper.service(IDEJspServlet.java:173)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.serviceJspF
Jl
e(IDEJspServlet.java:246)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.service(IDE
ts
pServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
sc
her.java:683)
at
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDi
ap
atcher.java:574)
at
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDisp
St
cher.java:497)
at
org.apache.struts.tiles.TilesUtilStrutsModulesImpl.doInclude(TilesUtil
Tt
rutsModulesImpl.java:122)
at
org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:161)
at
org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:703)
at
org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(Insert
aa
g.java:818)
at
org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:467)
at
org.apache.jsp.base_0005flayout$jsp._jspService(base_0005flayout$jsp.j
rv
a:1006)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletW
ia
pper.service(IDEJspServlet.java:173)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.serviceJspF
Jl
e(IDEJspServlet.java:246)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.service(IDE
ts
pServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
sc
her.java:683)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
ap
atcher.java:431)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
at
cher.java:355)
at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.j
ov
a:1033)
at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestPr
ic
essor.java:269)
at
org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(T
el
esRequestProcessor.java:249)
at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(Til
Ps
RequestProcessor.java:303)
at
org.apache.struts.action.RequestProcessor.processActionForward(Request
ar
ocessor.java:401)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.jav
):
279)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1407
cat
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:496)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
la
tionFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
lt
erChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
jv
e.java:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
l4
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
jv
e.java:190)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
ja
va:566)
at
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.
ja
va:246)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
34
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2
v4
7)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
ja
:180)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
Va
va:566)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcher
ja
lve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
va
va:564)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
ja
:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
6a
va:564)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:4
j8
)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
e4
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
j.
java:174)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
.4
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor
aj
ava:1027)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.jav
J:
1125)
at java.lang.Thread.run(Thread.java:536)
----- Root Cause -----
java.io.FileNotFoundException: /pages/wf_category/pager_region.jsp
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.loadJSP(IDE
rs
pServlet.java:376)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletW
ra
pper.loadIfNecessary(IDEJspServlet.java:148)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletW
ia
pper.service(IDEJspServlet.java:160)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.serviceJspF
Jl
e(IDEJspServlet.java:246)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.service(IDE
ts
pServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
sc
her.java:683)
at
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDi
ap
atcher.java:574)
at
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDisp
jt
cher.java:497)
at
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.
ta
va:819)
at
org.apache.jsp.wf_0005fcategory_0005fchoose$jsp._jspService(wf_0005fca
re
gory_0005fchoose$jsp.java:107)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletW
ia
pper.service(IDEJspServlet.java:173)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.serviceJspF
Jl
e(IDEJspServlet.java:246)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.service(IDE
ts
pServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
sc
her.java:683)
at
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDi
ap
atcher.java:574)
at
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDisp
St
cher.java:497)
at
org.apache.struts.tiles.TilesUtilStrutsModulesImpl.doInclude(TilesUtil
Tt
rutsModulesImpl.java:122)
at
org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:161)
at
org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:703)
at
org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(Insert
aa
g.java:818)
at
org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:467)
at
org.apache.jsp.base_0005flayout$jsp._jspService(base_0005flayout$jsp.j
rv
a:1006)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet$JspServletW
ia
pper.service(IDEJspServlet.java:173)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.serviceJspF
Jl
e(IDEJspServlet.java:246)
at
org.netbeans.modules.tomcat.tomcat40.runtime.IDEJspServlet.service(IDE
ts
pServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
sc
her.java:683)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
ap
atcher.java:431)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
at
cher.java:355)
at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.j
ov
a:1033)
at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestPr
ic
essor.java:269)
at
org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(T
el
esRequestProcessor.java:249)
at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(Til
Ps
RequestProcessor.java:303)
at
org.apache.struts.action.RequestProcessor.processActionForward(Request
ar
ocessor.java:401)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.jav
):
279)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1407
cat
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:496)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
la
tionFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
lt
erChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
jv
e.java:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
l4
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
jv
e.java:190)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
ja
va:566)
at
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.
ja
va:246)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
34
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2
v4
7)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
ja
:180)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
Va
va:566)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcher
ja
lve.java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
va
va:564)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
ja
:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
6a
va:564)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:4
j8
)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
e4
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
j.
java:174)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.
:a
va:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
.4
72)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor
aj
ava:1027)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.jav
:
1125) at java.lang.Thread.run(Thread.java:536)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]