/** * Get whether the Throwable hierarchy for this JDK supports * initCause()/getCause(). */ public static synchronized boolean supportsNestedThrowable() { if (supportsNestedThrowable == null) { try { Throwable.class.getMethod("initCause", new Class[] {Throwable.class}); Throwable.class.getMethod("getCause", (Class[])null); supportsNestedThrowable = Boolean.TRUE; getLog().debug("Detected JDK support for nested exceptions."); } catch (NoSuchMethodException e) { supportsNestedThrowable = Boolean.FALSE; getLog().debug("Nested exceptions are not supported by this JDK."); } } return supportsNestedThrowable.booleanValue(); }
/** * Get whether the Throwable hierarchy for this JDK supports * initCause()/getCause(). */ public static synchronized boolean supportsNestedThrowable() { if (supportsNestedThrowable == null) { try { Throwable.class.getMethod("initCause", new Class[] {Throwable.class}); Throwable.class.getMethod("getCause", (Class[])null); supportsNestedThrowable = Boolean.TRUE; getLog().debug("Detected JDK support for nested exceptions."); } catch (NoSuchMethodException e) { supportsNestedThrowable = Boolean.FALSE; getLog().debug("Nested exceptions are not supported by this JDK."); } } return supportsNestedThrowable.booleanValue(); }
/** * Get the underlying cause <code>Throwable</code> of the given exception * if this JDK supports the <code>Throwable#getCause()</code> method. */ public static Throwable getCause(Throwable exception) { if (supportsNestedThrowable()) { try { Method getCauseMethod = exception.getClass().getMethod("getCause", (Class[])null); return (Throwable)getCauseMethod.invoke(exception, (Object[])null); } catch (Exception e) { getLog().warn( "Unable to invoke getCause() method on class: " + exception.getClass().getName(), e); } } return null; }
/** * Get the underlying cause <code>Throwable</code> of the given exception * if this JDK supports the <code>Throwable#getCause()</code> method. */ public static Throwable getCause(Throwable exception) { if (supportsNestedThrowable()) { try { Method getCauseMethod = exception.getClass().getMethod("getCause", (Class[])null); return (Throwable)getCauseMethod.invoke(exception, (Object[])null); } catch (Exception e) { getLog().warn( "Unable to invoke getCause() method on class: " + exception.getClass().getName(), e); } } return null; }
/** * Set the given <code>Throwable<code>'s cause if this JDK supports * the <code>Throwable#initCause(Throwable)</code> method. */ public static Throwable setCause(Throwable exception, Throwable cause) { if (exception != null) { if (supportsNestedThrowable()) { try { Method initCauseMethod = exception.getClass().getMethod("initCause", new Class[] {Throwable.class}); initCauseMethod.invoke(exception, new Object[] {cause}); } catch (Exception e) { getLog().warn( "Unable to invoke initCause() method on class: " + exception.getClass().getName(), e); } } } return exception; }
/** * Set the given <code>Throwable<code>'s cause if this JDK supports * the <code>Throwable#initCause(Throwable)</code> method. */ public static Throwable setCause(Throwable exception, Throwable cause) { if (exception != null) { if (supportsNestedThrowable()) { try { Method initCauseMethod = exception.getClass().getMethod("initCause", new Class[] {Throwable.class}); initCauseMethod.invoke(exception, new Object[] {cause}); } catch (Exception e) { getLog().warn( "Unable to invoke initCause() method on class: " + exception.getClass().getName(), e); } } } return exception; }