Summary:

our custom taglib exceptions are being masked from the Jsp errorPages by 
our usage of the struts template taglibs. Is there a way we can 
percolate our exceptions to the JSP error pages?

Details

We're running using WebLogic 6.0 on Linux.

We've been using struts for about six months now and are reasonably 
pleased with it. However, using the template tags masks the exceptions 
thrown by our custom taglibs. It's not a big problem for our developers, 
since we can look at the server logs to get the full stack traces. 
However, the error handlers we show via our web GUI are useless for our 
QA to base bug reports on.

For instance, we have a mapping in struts-config.xml like

<action path="/login"
....
input="/templates/login.jsp"


The input template looks like this

<%@ taglib prefix="template" uri= 
"http://jakarta.apache.org/struts/template"; 
<http://jakarta.apache.org/struts/template> %>
<template:insert template="basic.jsp">
<template:put name="title" content="/pages/bits/title.jsp" />
<template:put name="content" content="/pages/login.jsp" />
<template:put name="header" content="/pages/bits/header.jsp" />
<template:put name="footer" content="/pages/bits/footer.jsp" />
</template:insert>

Basic.jsp is also straightforward, simply placing the template elements 
on the page. Here's a snippet.

<tr>
<td align="center" border="0"><template:get name="content"/></td>
</tr>

and then we've got your typical login.jsp page with a few custom taglibs 
of our own design. The problem occurs when we get an exception in our 
taglibs. The Expection is thrown within our taglibs , but the JSP 
ErrorPages show

Exception found onErrorPage

javax.servlet.ServletException: runtime failure in custom tag 'get'
        at jsp_servlet._templates._basic._jspService(_basic.java:196)
        at weblogic.servlet.jsp.JspBase.service(JspBase.java:27) 
        ....

RootCause() is

javax.servlet.jsp.JspException
        at org.apache.struts.taglib.template.GetTag.doStartTag(GetTag.java:193)
        at jsp_servlet._templates._basic._jspService(_basic.java:18)
        .....

The Offending line in basic.jsp is the insertion of the "login.jsp" page 
with our custom taglib which has thrown an exception. Yet JspException 
doesn't define a getRootCause() call, so our tablib exception (usually a 
runtime one) is completely masked from our QA team via the GUI. The 
server logging we have in place clearly shows the Exception (in this 
case a SQL connection problem), but we can't get that information up to 
our exception page..

Is there a solution to this problem? I've heard that future JSP specs 
allow for nested/hierachical Exceptions in JspException. Until then, 
does anyone have suggestions or current practices of how you handle 
expections that are masked by other taglibs?


-tak


Reply via email to