[ http://issues.apache.org/jira/browse/DERBY-2181?page=comments#action_12458977 ] Daniel John Debrunner commented on DERBY-2181: ----------------------------------------------
I was mislead by the comments in the javadoc for Throwable, which said many Throwables had such a mechanism (gives a list) and all had been retrofitted. I always thought that meant all in the jdk, not just the handful that is listed. > StandardException.printStackTrace() does not print the nested exception > (cause) > ------------------------------------------------------------------------------- > > Key: DERBY-2181 > URL: http://issues.apache.org/jira/browse/DERBY-2181 > Project: Derby > Issue Type: Bug > Affects Versions: 10.2.1.6 > Environment: Java 1.5 > Reporter: Christian d'Heureuse > > In my Servlet application, an I/O error occurred, but I couldn't see the > error message of the I/O error. > At line 298 in StandardException.java, the I/O exception is packed into a > StandardException: > throw StandardException.newException( > SQLState.DATA_UNEXPECTED_EXCEPTION, ioe); > When my Servlet catches the exception, it calls Throwable.printStackTrace() > to generate a detailed error message. The output of printStackTrace() does > not list the nested I/O exception. > In Java 1.5, Throwable.printStackTrace() calls getCause() to get the nested > exception. GetCause() returns null, because the cause has not been set. > One solution could be to override Throwable.getCause() and initCause() in > StandardException to get and set the nested exception. There are already > getNestedException() and setNestedException() methods in StandardException > which could be mapped to getCause() and initCause(). > Another solution could be to change the constructor > StandardException(String messageID, Throwable t, Object[] args) > This constructor currently calls > super(messageID); > Instead it could call > super(messageID,t); > to pass the nested Exception. > StandardException.setNestedException() could be changed to call > Throwable.initCause(). But the API docs of initCause() state stat "This > method can be called at most once". So it's probably better to override > getCause() and initCause(). > A problem might me that Throwable.getCause() and initCause() have been > introduced in Java 1.4. But if these methods are implemented in > StandardException, they would be just normal methods in Java 1.3 and > overrides in Java >= 1.4. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
