Not that this helps anyone yet, but Java 1.4 has new methods/constructors for Throwable/Exception/RuntimeException etc. that allow you to record the root cause of an exception. At some point struts should use that instead of a JspWrapperException, but until then . . .
M "Rick Hightower" To: "Struts Developers List" <[EMAIL PROTECTED]> <[EMAIL PROTECTED] cc: m> Subject: Exception handling --- suggestion for improvements ---- (e.g., template tag masks original exception) correction in sample code 11/16/2001 01:53 PM Please respond to "Struts Developers List" We have been using struts for a good while. We really dig the framework, but... Often times the struts tags catch the original exception (e.g., ClassCastException), and then throw a JspException; thus, losing the original stack trace. This hides\masks the original exception. Hiding the orginal stack trace makes it harder to debug the problem. I wrote a JSPWrapperException that preserves the orginal stack trace for debugging. JSPWrapperException extends JspWrapper; however, like ServletException, it captures the original stack trace and displays it for debugging, i.e., the JSPWrapperException prints out the original stack trace of the original exception. This is a real boon for debugging. I modified 50 or so files in our copy of the struts code base (a 1.0 derivative with some bug fixes and extra error handing) to use the JSPWrapperException instead of the JspException. It cost about an hour to make the changes, but I feel it will save us hours of debugging in the future. There is an ant build file with struts so making the changes and creating struts.jar was easy. I search the struts code base for code like this.... (example code) try{ } catch(XYZException e){ throw new JspException(e.getMessage()); } to code that looks like this try{ } catch(XYZException e){ throw new JspWrapperException(e, e.getMessage()); } BTW Here is the code for JspWrapperException.... Enjoy..... /* * JspWrapperException.java * * Created on November 15, 2001, 11:14 PM */ package org.apache.struts.util; import javax.servlet.jsp.JspException; /** * * @author rick */ public class JspWrapperException extends JspException { Exception e; /** * @param Exception e * @param String message */ public JspWrapperException(Exception e, String message) { super(message); this.e = e; } /** */ public void printStackTrace () { super.printStackTrace(); String sep = System.getProperty("line.separator", "\r\n"); if (e != null) { System.err.println("--------------- extended Exception nest ----------- "); e.printStackTrace(); } } /** * @param ps */ public void printStackTrace (java.io.PrintStream ps) { super.printStackTrace(ps); String sep = System.getProperty("line.separator", "\r\n"); if (e != null) { ps.println("--------------- extended Exception nest ----------- "); e.printStackTrace(ps); } } /** * @param pw */ public void printStackTrace (java.io.PrintWriter pw) { super.printStackTrace(pw); String sep = System.getProperty("line.separator", "\r\n"); // //Nested exception if (e != null) { pw.println("--------------- extended Exception nest ----------- "); e.printStackTrace(pw); } } /** * @return */ public String getMessage () { StringBuffer message = new StringBuffer(150); message.append(super.getMessage()); // //add Line separator String sep = System.getProperty("line.separator", "\r\n"); message.append(sep); // //Add the nested exception if (e != null) { message.append(e.getMessage()); //char = props["line.separator"] } return message.toString(); } } Rick Hightower Director of Development eBlox, Inc. Check out our new website! www.eblox.com Contact Info: eBlox Tucson phone: 520-615-9345 x103 fax: 520-529-5774 Rick's stuff: http://www.eblox.com/people_detail.php?id=52 http://www.geocities.com/rick_m_hightower/ http://www.brainbench.com/transcript.jsp?pid=2351036 -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED] > For additional commands, e-mail: <mailto:[EMAIL PROTECTED] > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED] > For additional commands, e-mail: <mailto:[EMAIL PROTECTED] > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>