[
http://issues.apache.org/jira/browse/DERBY-2181?page=comments#action_12459021 ]
Christian d'Heureuse commented on DERBY-2181:
---------------------------------------------
> void printAllTraces(SQLException e) {
> ...
> e.printStackTrace();
> Throwable t = e.getCause();
> while (t != null) {
> ...
> t.printStackTrace();
> t = t.getCause();
This would print the "cause" chain twice, because Throwable.printStackTrace()
already walks through the getCause() chain.
I found some links for this topic:
http://weblogs.java.net/blog/lancea/archive/2006/02/jdbc_40_sqlexce.html
http://www.oreillynet.com/onjava/blog/2006/03/proper_handling_of_databaserel.html
http://db.apache.org/derby/docs/dev/devguide/rdevprocsqle.html
> 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