You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Henri Yandell <ba...@generationjava.com> on 2003/01/27 06:15:29 UTC

Re: [lang] RE: Exception to XML?

I'd like to propose the following two methods to ExceptionUtils:

1) getFullStackTrace. This returns a stack-trace including its full
print-out of nestables. It assumes that when it hits a nestable, it
doesn't need to carry on.

2) isNestedException. [okay, needs to be name changed to
isNestedThrowable]. This lets us see if a throwable is nestable, or at
least if ExceptionUtils thinks it is.

I would be aiming these for the 2.0 release. Any nays?

Hen

>      * A way to get the entire nested stack-trace of an throwable.
>      *
>      * @param t The <code>Throwable</code>.
>      * @return The nested stack trace, with the root cause first.
>      */
>     public static String getFullStackTrace(Throwable t) {
>         StringWriter sw = new StringWriter();
>         PrintWriter pw = new PrintWriter(sw, true);
>         Throwable[] ts = getThrowables(t);
>         for(int i=0; i<ts.length; i++) {
>             ts[i].printStackTrace(pw);
>             if(isNestedException(ts[i])) {
>                 break;
>             }
>         }
>         return sw.getBuffer().toString();
>     }
>
>     /**
>      * Whether an Throwable is considered nested or not.
>      *
>      * @param t The <code>Throwable</code>.
>      * @return boolean true/false
>      */
>     public static boolean isNestedException(Throwable throwable) {
>         if(throwable == null) {
>             return false;
>         }
>
>         if (throwable instanceof Nestable) {
>             return true;
>         } else if (throwable instanceof SQLException) {
>             return true;
>         } else if (throwable instanceof InvocationTargetException) {
>             return true;
>         }
>
>         int sz = CAUSE_METHOD_NAMES.length;
>         for(int i=0; i<sz; i++) {
>             try {
>                 Method method = throwable.getClass().getMethod(CAUSE_METHOD_NAMES[i], null);
>                 if(method != null) {
>                     return true;
>                 }
>             } catch (NoSuchMethodException ignored) {
>             } catch (SecurityException ignored) {
>             }
>         }
>
>         try {
>             Field field = throwable.getClass().getField("detail");
>             if(field != null) {
>                 return true;
>             }
>         } catch (NoSuchFieldException ignored) {
>         } catch (SecurityException ignored) {
>         }
>
>         return false;
>     }


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>