Why do you do all that work to print the stack trace?
Shouldn't exception.printStackTrace(out) do what you want?
This also follows the exception.getCause() chain and
prints out nested exceptions.
As a side note, if you really want to log
all nested exceptions then you have to do a little extra
work because some exceptions implement nesting in a way
that is not returned by getCause() (mostly because it
is an old implementation). I do the following:
log.error(exception.getMessage(), exception);
// struts utils often save original exception under
Globals.EXCEPTION_KEY
Throwable t = (Throwable) pageContext.
getAttribute(Globals.EXCEPTION_KEY,
PageContext.REQUEST_SCOPE);
if (t != null && t != exception && t != exception.getCause()) {
log.error("original exception: ", t);
}
if (exception instanceof JspException) {
Throwable t2 = ((JspException)exception).getRootCause();
if (t2 != null && t2 != t && t2 != exception && t2 !=
exception.getCause())
log.error("root cause: ", t2);
} else if (exception instanceof EJBException) {
Throwable t3 = ((EJBException)exception).getCausedByException();
if (t3 != null && t3 != t && t3 != exception && t3 !=
exception.getCause())
log.error("caused by: ", t3);
}
- Dan
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, February 15, 2005 8:35 AM
> To: Struts Users Mailing List
> Subject: RE: Proper n tiered exception handling
>
> I probably have not shown you enough in terms of setup.
> There is more to configure this completely. I will try to
> outline this shortly. To answer your question , I don't
> rethrow anything. It's not necessary. Your struts actions
> have the following signature:
>
> public ActionForward execute(ActionMapping mapping,
> ActionForm form,
> HttpServletRequest req, HttpServletResponse resp)
> throws Exception
> {
> .......
> }
>
> Any exception thrown within this method with propagate up
> through the exception handling framework. Whether it's a
> SQLException, RemoteException or any checked or runtime
> exception will flow upward. You delcare where to forward to
> (what page). I designed a generic error handling jsp,
> because I did not want to design a separate JSP for every
> type of exception. This is a preference thing. My way was
> right for me. Here is my JSP for handling errors:
>
> <[EMAIL PROTECTED] import="java.util.*" %>
> <[EMAIL PROTECTED] uri="/WEB-INF/taglibs-log.tld" prefix="log" %>
> <[EMAIL PROTECTED] uri="/WEB-INF/fmt.tld" prefix="fmt" %>
> <[EMAIL PROTECTED] uri="/WEB-INF/c.tld" prefix="c" %>
> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
>
> <%
> Throwable t =
> (Throwable)request.getAttribute("org.apache.struts.action.EXCEPTION");
> if ( t!= null)
> {
> StackTraceElement [] trace = t.getStackTrace();
> int size = trace.length;
> out.print("<!--\n\n");
> out.print(t.toString());out.print("\n");
> for (int i=0; i < size; i++)
> {
> out.print(trace[i].toString());
> out.print("\n");
> }
> out.print("\n\n-->");
> }
>
> %>
> <!-- #BeginEditable "body" -->
>
>
> <!-- center box header image -->
> <div id="centerBoxTopErrorTall2">System Error</div>
>
> <!-- begin center box content stretch image -->
> <div id="centerBoxStretch2">
>
> <table width="95%" border="0" cellpadding="0" cellspacing="0">
> <tr >
> <td>
> <div id="infoBoxError">
> <!-- left nested inside
> infobox -->
>
> <html:errors
> bundle="systemerrorbundle"/>
>
> </div>
> </td>
> </tr>
> </table>
>
> </div>
> <!-- end center box content stretch image -->
>
> <!-- center box content footer image -->
> <div id="centerBoxBtm2"> </div>
>
>
> <!-- #EndEditable "body" -->
>
>
> There's more to this story. Notice the line:
> <html:errors bundle="systemerrorbundle"/>
>
> This is where I supply a customer message. The message is
> externalized in a properties file for I18N. This is my
> syserror.jsp page which is referenced in the struts.xml config.
>
>
>
> -----Original Message-----
> From: Brian McGovern <[EMAIL PROTECTED]>
> Sent: Feb 15, 2005 11:24 AM
> To: Struts Users Mailing List <[email protected]>,
> [EMAIL PROTECTED]
> Subject: RE: Proper n tiered exception handling
>
> Jim,
> So in this approach you really dont use any try catch blocks
> at all? or you just re - throw the original exception that you caught?
>
> How do you grab the error on the JSP page?
>
> Thanks
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, February 15, 2005 11:16 AM
> To: Struts Users Mailing List
> Subject: Re: Proper n tiered exception handling
>
>
> I use declaritive exception handling which is built into
> Struts. Works great for me. I really don't use custom
> exceptions that much any more because it's harder to track
> the original error. Also, I don't clutter my code with alot
> of try/catch blocks unless it's absolutely necessary. I
> allow all exceptions to propagate through the Struts built-in
> exception handling framework.
>
> Here is an example of declaritive exception handling in the
> struts config:
>
> <global-exceptions>
> <exception
> key="error.application.nullpointer"
> type="java.lang.NullPointerException"
>
> path="/tmpl_main2.jsp?error=/error/null.jsp&pagetitle=error.ti
> tle.key">
> </exception>
> <exception
> key="error.application.parse"
> type="java.text.ParseException"
>
> path="/tmpl_main2.jsp?pageleft=/mainmenu.jsp&pagecenter=/error
/syserror.jsp&pagetitle=error.title.key">
> </exception>
> <exception
> key="error.application.import.zip"
> type="java.util.zip.ZipException"
>
> path="/tmpl_main2.jsp?pageleft=/mainmenu.jsp&pagecenter=/error
/syserror.jsp&pagetitle=error.title.key">
> </exception>
> <exception
> key="error.application.unhandled"
> type="java.lang.Exception"
>
> path="/tmpl_main2.jsp?pageleft=/mainmenu.jsp&pagecenter=/error
/syserror.jsp&pagetitle=error.title.key">
> </exception>
>
> When these exception types are thrown, the user is forwarded
> to the proper custom page. If your creative you can grab the
> current error and print the stack trace as an HTML comment
> within the page for your review. You can then view the
> exception stack trace by selecting view/source from you
> browser. Only show the user and nice "pretty" message.
>
>
> Jim
>
>
> -----Original Message-----
> From: Brian McGovern <[EMAIL PROTECTED]>
> Sent: Feb 15, 2005 10:28 AM
> To: [email protected]
> Subject: Proper n tiered exception handling
>
> I'm looking to get a handle on best exception handling
> practices in my app. Kinda beginner question i guess, sorry.
>
> Im catching the various sql and naming exceptions in the data
> classes and logging and throwing a custom exception called
> ApplicationException which is blank and provided below. I've
> read up but an still a little confused on how exactly to
> build this exception class to extend the available struts
> exception classes that would gracefully map to an error
> display jsp where i could display the error to the user.
> Right now I just get the HTTP status 500 strack trace on the screen.
>
> Controller snippet that catches the data obj's thrown
> ApplicationException:
> --------------------------------------------------------------
> ----------
> try {
> zRepBeanBn =
> MyData.getRepByID(StringUtils.convertToInt(request.getParamete
> r("RepID")));
> }catch (ApplicationException zAppEx){
> throw zAppEx;
> }
> --------------------------------------------------------------
> ----------
>
> ApplicationException that needs work: How do I extend this?
> --------------------------------------------------------------
> ----------
> public class ApplicationException extends Exception {
> public ApplicationException(String message) { }
> }
> --------------------------------------------------------------
> ----------
>
> Thanks
>
>
>
>
>
>
>
>
>
> ---------------------------------------------------------------------
> 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]