addCauseMethodName
public static void addCauseMethodName(String methodName)
Adds to the list of method names used in the search for Throwable
objects.
methodName
- the methodName to add to the list, null
and empty strings are ignored
getCause
public static Throwable getCause(Throwable throwable)
Introspects the
Throwable
to obtain the cause.
The method searches for methods with specific names that return a
Throwable
object. This will pick up most wrapping exceptions,
including those from JDK 1.4, and
NestableException
.
The method names can be added to using
addCauseMethodName(String)
.
The default list searched for are:
getCause()
getNextException()
getTargetException()
getException()
getSourceException()
getRootCause()
getCausedByException()
getNested()
In the absence of any such method, the object is inspected for a
detail
field assignable to a
Throwable
.
If none of the above is found, returns
null
.
throwable
- the throwable to introspect for a cause, may be null
- the cause of the
Throwable
,
null
if none found or null throwable input
getCause
public static Throwable getCause(Throwable throwable,
String[] methodNames)
Introspects the
Throwable
to obtain the cause.
- Try known exception types.
- Try the supplied array of method names.
- Try the field 'detail'.
A
null
set of method names means use the default set.
A
null
in the set of method names will be ignored.
throwable
- the throwable to introspect for a cause, may be nullmethodNames
- the method names, null treated as default set
- the cause of the
Throwable
,
null
if none found or null throwable input
getFullStackTrace
public static String getFullStackTrace(Throwable throwable)
A way to get the entire nested stack-trace of an throwable.
throwable
- the Throwable
to be examined
- the nested stack trace, with the root cause first
getRootCause
public static Throwable getRootCause(Throwable throwable)
Introspects the
Throwable
to obtain the root cause.
This method walks through the exception chain to the last element,
"root" of the tree, using
getCause(Throwable)
, and
returns that exception.
throwable
- the throwable to get the root cause for, may be null
- the root cause of the
Throwable
,
null
if none found or null throwable input
getRootCauseStackTrace
public static String[] getRootCauseStackTrace(Throwable throwable)
Creates a compact stack trace for the root cause of the supplied
Throwable
.
throwable
- the throwable to examine, may be null
- an array of stack trace frames, never null
getStackFrames
public static String[] getStackFrames(Throwable throwable)
Captures the stack trace associated with the specified
Throwable
object, decomposing it into a list of
stack frames.
throwable
- the Throwable
to examine, may be null
- an array of strings describing each stack frame, never null
getStackTrace
public static String getStackTrace(Throwable throwable)
Gets the stack trace from a Throwable as a String.
throwable
- the Throwable
to be examined
- the stack trace as generated by the exception's
printStackTrace(PrintWriter)
method
getThrowableCount
public static int getThrowableCount(Throwable throwable)
Counts the number of
Throwable
objects in the
exception chain.
A throwable without cause will return
1
.
A throwable with one cause will return
2
and so on.
A
null
throwable will return
0
.
throwable
- the throwable to inspect, may be null
- the count of throwables, zero if null input
getThrowables
public static Throwable[] getThrowables(Throwable throwable)
Returns the list of
Throwable
objects in the
exception chain.
A throwable without cause will return an array containing
one element - the input throwable.
A throwable with one cause will return an array containing
two elements. - the input throwable and the cause throwable.
A
null
throwable will return an array size zero.
throwable
- the throwable to inspect, may be null
- the array of throwables, never null
indexOfThrowable
public static int indexOfThrowable(Throwable throwable,
Class clazz)
Returns the (zero based) index of the first
Throwable
that matches the specified class (exactly) in the exception chain.
Subclasses of the specified class do not match - see
indexOfType(Throwable,Class)
for the opposite.
A
null
throwable returns
-1
.
A
null
type returns
-1
.
No match in the chain returns
-1
.
throwable
- the throwable to inspect, may be nullclazz
- the class to search for, subclasses do not match, null returns -1
- the index into the throwable chain, -1 if no match or null input
indexOfThrowable
public static int indexOfThrowable(Throwable throwable,
Class clazz,
int fromIndex)
Returns the (zero based) index of the first
Throwable
that matches the specified type in the exception chain from
a specified index.
Subclasses of the specified class do not match - see
indexOfType(Throwable,Class,int)
for the opposite.
A
null
throwable returns
-1
.
A
null
type returns
-1
.
No match in the chain returns
-1
.
A negative start index is treated as zero.
A start index greater than the number of throwables returns
-1
.
throwable
- the throwable to inspect, may be nullclazz
- the class to search for, subclasses do not match, null returns -1fromIndex
- the (zero based) index of the starting position,
negative treated as zero, larger than chain size returns -1
- the index into the throwable chain, -1 if no match or null input
indexOfType
public static int indexOfType(Throwable throwable,
Class type)
Returns the (zero based) index of the first
Throwable
that matches the specified class or subclass in the exception chain.
Subclasses of the specified class do match - see
indexOfThrowable(Throwable,Class)
for the opposite.
A
null
throwable returns
-1
.
A
null
type returns
-1
.
No match in the chain returns
-1
.
throwable
- the throwable to inspect, may be nulltype
- the type to search for, subclasses match, null returns -1
- the index into the throwable chain, -1 if no match or null input
indexOfType
public static int indexOfType(Throwable throwable,
Class type,
int fromIndex)
Returns the (zero based) index of the first
Throwable
that matches the specified type in the exception chain from
a specified index.
Subclasses of the specified class do match - see
indexOfThrowable(Throwable,Class)
for the opposite.
A
null
throwable returns
-1
.
A
null
type returns
-1
.
No match in the chain returns
-1
.
A negative start index is treated as zero.
A start index greater than the number of throwables returns
-1
.
throwable
- the throwable to inspect, may be nulltype
- the type to search for, subclasses match, null returns -1fromIndex
- the (zero based) index of the starting position,
negative treated as zero, larger than chain size returns -1
- the index into the throwable chain, -1 if no match or null input
isCauseMethodName
public static boolean isCauseMethodName(String methodName)
Tests if the list of method names used in the search for Throwable
objects include the given name.
methodName
- the methodName to search in the list.
- if the list of method names used in the search for
Throwable
objects include the given name.
isNestedThrowable
public static boolean isNestedThrowable(Throwable throwable)
Checks whether this
Throwable
class can store a cause.
This method does
not check whether it actually does store a cause.
throwable
- the Throwable
to examine, may be null
- boolean
true
if nested otherwise false
isThrowableNested
public static boolean isThrowableNested()
Checks if the Throwable class has a
getCause
method.
This is true for JDK 1.4 and above.
- true if Throwable is nestable
printRootCauseStackTrace
public static void printRootCauseStackTrace(Throwable throwable)
Prints a compact stack trace for the root cause of a throwable
to
System.err
.
The compact stack trace starts with the root cause and prints
stack frames up to the place where it was caught and wrapped.
Then it prints the wrapped exception and continues with stack frames
until the wrapper exception is caught and wrapped again, etc.
The method is equivalent to
printStackTrace
for throwables
that don't have nested causes.
throwable
- the throwable to output
printRootCauseStackTrace
public static void printRootCauseStackTrace(Throwable throwable,
PrintStream stream)
Prints a compact stack trace for the root cause of a throwable.
The compact stack trace starts with the root cause and prints
stack frames up to the place where it was caught and wrapped.
Then it prints the wrapped exception and continues with stack frames
until the wrapper exception is caught and wrapped again, etc.
The method is equivalent to
printStackTrace
for throwables
that don't have nested causes.
throwable
- the throwable to output, may be nullstream
- the stream to output to, may not be null
printRootCauseStackTrace
public static void printRootCauseStackTrace(Throwable throwable,
PrintWriter writer)
Prints a compact stack trace for the root cause of a throwable.
The compact stack trace starts with the root cause and prints
stack frames up to the place where it was caught and wrapped.
Then it prints the wrapped exception and continues with stack frames
until the wrapper exception is caught and wrapped again, etc.
The method is equivalent to
printStackTrace
for throwables
that don't have nested causes.
throwable
- the throwable to output, may be nullwriter
- the writer to output to, may not be null
removeCauseMethodName
public static void removeCauseMethodName(String methodName)
Removes from the list of method names used in the search for Throwable
objects.
methodName
- the methodName to remove from the list, null
and empty strings are ignored
removeCommonFrames
public static void removeCommonFrames(List causeFrames,
List wrapperFrames)
Removes common frames from the cause trace given the two stack traces.
causeFrames
- stack trace of a cause throwablewrapperFrames
- stack trace of a wrapper throwable