Class ExceptionUtils
- java.lang.Object
-
- org.apache.commons.lang3.exception.ExceptionUtils
-
public class ExceptionUtils extends java.lang.Object
Provides utilities for manipulating and examining
Throwable
objects.- Since:
- 1.0
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String[]
CAUSE_METHOD_NAMES
The names of methods commonly used to access a wrapped exception.private static int
NOT_FOUND
(package private) static java.lang.String
WRAPPED_MARKER
Used when printing stack frames to denote the start of a wrapped exception.
-
Constructor Summary
Constructors Constructor Description ExceptionUtils()
Public constructor allows an instance ofExceptionUtils
to be created, although that is not normally necessary.
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static java.lang.Throwable
getCause(java.lang.Throwable throwable)
Deprecated.This feature will be removed in Lang 4.0, useThrowable.getCause()
insteadstatic java.lang.Throwable
getCause(java.lang.Throwable throwable, java.lang.String[] methodNames)
Deprecated.This feature will be removed in Lang 4.0, useThrowable.getCause()
insteadprivate static java.lang.Throwable
getCauseUsingMethodName(java.lang.Throwable throwable, java.lang.String methodName)
Finds aThrowable
by method name.static java.lang.String[]
getDefaultCauseMethodNames()
Deprecated.This feature will be removed in Lang 4.0static java.lang.String
getMessage(java.lang.Throwable th)
Gets a short message summarising the exception.static java.lang.Throwable
getRootCause(java.lang.Throwable throwable)
Introspects theThrowable
to obtain the root cause.static java.lang.String
getRootCauseMessage(java.lang.Throwable th)
Gets a short message summarising the root cause exception.static java.lang.String[]
getRootCauseStackTrace(java.lang.Throwable throwable)
Creates a compact stack trace for the root cause of the suppliedThrowable
.(package private) static java.util.List<java.lang.String>
getStackFrameList(java.lang.Throwable t)
Produces aList
of stack frames - the message is not included.(package private) static java.lang.String[]
getStackFrames(java.lang.String stackTrace)
Returns an array where each element is a line from the argument.static java.lang.String[]
getStackFrames(java.lang.Throwable throwable)
Captures the stack trace associated with the specifiedThrowable
object, decomposing it into a list of stack frames.static java.lang.String
getStackTrace(java.lang.Throwable throwable)
Gets the stack trace from a Throwable as a String.static int
getThrowableCount(java.lang.Throwable throwable)
Counts the number ofThrowable
objects in the exception chain.static java.util.List<java.lang.Throwable>
getThrowableList(java.lang.Throwable throwable)
Returns the list ofThrowable
objects in the exception chain.static java.lang.Throwable[]
getThrowables(java.lang.Throwable throwable)
Returns the list ofThrowable
objects in the exception chain.static boolean
hasCause(java.lang.Throwable chain, java.lang.Class<? extends java.lang.Throwable> type)
Does the throwable's causal chain have an immediate or wrapped exception of the given type?private static int
indexOf(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> type, int fromIndex, boolean subclass)
Worker method for theindexOfType
methods.static int
indexOfThrowable(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> clazz)
Returns the (zero-based) index of the firstThrowable
that matches the specified class (exactly) in the exception chain.static int
indexOfThrowable(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> clazz, int fromIndex)
Returns the (zero-based) index of the firstThrowable
that matches the specified type in the exception chain from a specified index.static int
indexOfType(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> type)
Returns the (zero-based) index of the firstThrowable
that matches the specified class or subclass in the exception chain.static int
indexOfType(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> type, int fromIndex)
Returns the (zero-based) index of the firstThrowable
that matches the specified type in the exception chain from a specified index.static void
printRootCauseStackTrace(java.lang.Throwable throwable)
Prints a compact stack trace for the root cause of a throwable toSystem.err
.static void
printRootCauseStackTrace(java.lang.Throwable throwable, java.io.PrintStream printStream)
Prints a compact stack trace for the root cause of a throwable.static void
printRootCauseStackTrace(java.lang.Throwable throwable, java.io.PrintWriter printWriter)
Prints a compact stack trace for the root cause of a throwable.static void
removeCommonFrames(java.util.List<java.lang.String> causeFrames, java.util.List<java.lang.String> wrapperFrames)
Removes common frames from the cause trace given the two stack traces.static <R> R
rethrow(java.lang.Throwable throwable)
Throw a checked exception without adding the exception to the throws clause of the calling method.private static <T extends java.lang.Throwable>
TthrowableOf(java.lang.Throwable throwable, java.lang.Class<T> type, int fromIndex, boolean subclass)
Worker method for thethrowableOfType
methods.static <T extends java.lang.Throwable>
TthrowableOfThrowable(java.lang.Throwable throwable, java.lang.Class<T> clazz)
Returns the firstThrowable
that matches the specified class (exactly) in the exception chain.static <T extends java.lang.Throwable>
TthrowableOfThrowable(java.lang.Throwable throwable, java.lang.Class<T> clazz, int fromIndex)
Returns the firstThrowable
that matches the specified type in the exception chain from a specified index.static <T extends java.lang.Throwable>
TthrowableOfType(java.lang.Throwable throwable, java.lang.Class<T> type)
Returns the throwable of the firstThrowable
that matches the specified class or subclass in the exception chain.static <T extends java.lang.Throwable>
TthrowableOfType(java.lang.Throwable throwable, java.lang.Class<T> type, int fromIndex)
Returns the firstThrowable
that matches the specified type in the exception chain from a specified index.private static <R,T extends java.lang.Throwable>
RtypeErasure(java.lang.Throwable throwable)
Claim a Throwable is another Exception type using type erasure.static <R> R
wrapAndThrow(java.lang.Throwable throwable)
Throw a checked exception without adding the exception to the throws clause of the calling method.
-
-
-
Field Detail
-
NOT_FOUND
private static final int NOT_FOUND
- See Also:
- Constant Field Values
-
CAUSE_METHOD_NAMES
private static final java.lang.String[] CAUSE_METHOD_NAMES
The names of methods commonly used to access a wrapped exception.
-
WRAPPED_MARKER
static final java.lang.String WRAPPED_MARKER
Used when printing stack frames to denote the start of a wrapped exception.
Package private for accessibility by test suite.
- See Also:
- Constant Field Values
-
-
Method Detail
-
getCause
@Deprecated public static java.lang.Throwable getCause(java.lang.Throwable throwable)
Deprecated.This feature will be removed in Lang 4.0, useThrowable.getCause()
insteadIntrospects 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.The default list searched for are:
getCause()
getNextException()
getTargetException()
getException()
getSourceException()
getRootCause()
getCausedByException()
getNested()
If none of the above is found, returns
null
.- Parameters:
throwable
- the throwable to introspect for a cause, may be null- Returns:
- the cause of the
Throwable
,null
if none found or null throwable input - Since:
- 1.0
-
getCause
@Deprecated public static java.lang.Throwable getCause(java.lang.Throwable throwable, java.lang.String[] methodNames)
Deprecated.This feature will be removed in Lang 4.0, useThrowable.getCause()
insteadIntrospects the
Throwable
to obtain the cause.A
null
set of method names means use the default set. Anull
in the set of method names will be ignored.- Parameters:
throwable
- the throwable to introspect for a cause, may be nullmethodNames
- the method names, null treated as default set- Returns:
- the cause of the
Throwable
,null
if none found or null throwable input - Since:
- 1.0
-
getCauseUsingMethodName
private static java.lang.Throwable getCauseUsingMethodName(java.lang.Throwable throwable, java.lang.String methodName)
Finds a
Throwable
by method name.- Parameters:
throwable
- the exception to examinemethodName
- the name of the method to find and invoke- Returns:
- the wrapped exception, or
null
if not found
-
getDefaultCauseMethodNames
@Deprecated public static java.lang.String[] getDefaultCauseMethodNames()
Deprecated.This feature will be removed in Lang 4.0Returns the default names used when searching for the cause of an exception.
This may be modified and used in the overloaded getCause(Throwable, String[]) method.
- Returns:
- cloned array of the default method names
- Since:
- 3.0
-
getMessage
public static java.lang.String getMessage(java.lang.Throwable th)
Gets a short message summarising the exception.The message returned is of the form {ClassNameWithoutPackage}: {ThrowableMessage}
- Parameters:
th
- the throwable to get a message for, null returns empty string- Returns:
- the message, non-null
- Since:
- 2.2
-
getRootCause
public static java.lang.Throwable getRootCause(java.lang.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
Throwable.getCause()
, and returns that exception.From version 2.2, this method handles recursive cause structures that might otherwise cause infinite loops. If the throwable parameter has a cause of itself, then null will be returned. If the throwable parameter cause chain loops, the last element in the chain before the loop is returned.
- Parameters:
throwable
- the throwable to get the root cause for, may be null- Returns:
- the root cause of the
Throwable
,null
if null throwable input
-
getRootCauseMessage
public static java.lang.String getRootCauseMessage(java.lang.Throwable th)
Gets a short message summarising the root cause exception.The message returned is of the form {ClassNameWithoutPackage}: {ThrowableMessage}
- Parameters:
th
- the throwable to get a message for, null returns empty string- Returns:
- the message, non-null
- Since:
- 2.2
-
getRootCauseStackTrace
public static java.lang.String[] getRootCauseStackTrace(java.lang.Throwable throwable)
Creates a compact stack trace for the root cause of the supplied
Throwable
.The output of this method is consistent across JDK versions. It consists of the root exception followed by each of its wrapping exceptions separated by '[wrapped]'. Note that this is the opposite order to the JDK1.4 display.
- Parameters:
throwable
- the throwable to examine, may be null- Returns:
- an array of stack trace frames, never null
- Since:
- 2.0
-
getStackFrameList
static java.util.List<java.lang.String> getStackFrameList(java.lang.Throwable t)
Produces a
List
of stack frames - the message is not included. Only the trace of the specified exception is returned, any caused by trace is stripped.This works in most cases - it will only fail if the exception message contains a line that starts with:
" at".
- Parameters:
t
- is any throwable- Returns:
- List of stack frames
-
getStackFrames
static java.lang.String[] getStackFrames(java.lang.String stackTrace)
Returns an array where each element is a line from the argument.
The end of line is determined by the value of
System.lineSeparator()
.- Parameters:
stackTrace
- a stack trace String- Returns:
- an array where each element is a line from the argument
-
getStackFrames
public static java.lang.String[] getStackFrames(java.lang.Throwable throwable)
Captures the stack trace associated with the specified
Throwable
object, decomposing it into a list of stack frames.The result of this method vary by JDK version as this method uses
Throwable.printStackTrace(java.io.PrintWriter)
. On JDK1.3 and earlier, the cause exception will not be shown unless the specified throwable alters printStackTrace.- Parameters:
throwable
- theThrowable
to examine, may be null- Returns:
- an array of strings describing each stack frame, never null
-
getStackTrace
public static java.lang.String getStackTrace(java.lang.Throwable throwable)
Gets the stack trace from a Throwable as a String.
The result of this method vary by JDK version as this method uses
Throwable.printStackTrace(java.io.PrintWriter)
. On JDK1.3 and earlier, the cause exception will not be shown unless the specified throwable alters printStackTrace.- Parameters:
throwable
- theThrowable
to be examined- Returns:
- the stack trace as generated by the exception's
printStackTrace(PrintWriter)
method
-
getThrowableCount
public static int getThrowableCount(java.lang.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 return2
and so on. Anull
throwable will return0
.From version 2.2, this method handles recursive cause structures that might otherwise cause infinite loops. The cause chain is processed until the end is reached, or until the next item in the chain is already in the result set.
- Parameters:
throwable
- the throwable to inspect, may be null- Returns:
- the count of throwables, zero if null input
-
getThrowableList
public static java.util.List<java.lang.Throwable> getThrowableList(java.lang.Throwable throwable)
Returns the list of
Throwable
objects in the exception chain.A throwable without cause will return a list containing one element - the input throwable. A throwable with one cause will return a list containing two elements. - the input throwable and the cause throwable. A
null
throwable will return a list of size zero.This method handles recursive cause structures that might otherwise cause infinite loops. The cause chain is processed until the end is reached, or until the next item in the chain is already in the result set.
- Parameters:
throwable
- the throwable to inspect, may be null- Returns:
- the list of throwables, never null
- Since:
- 2.2
-
getThrowables
public static java.lang.Throwable[] getThrowables(java.lang.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 of size zero.From version 2.2, this method handles recursive cause structures that might otherwise cause infinite loops. The cause chain is processed until the end is reached, or until the next item in the chain is already in the result set.
- Parameters:
throwable
- the throwable to inspect, may be null- Returns:
- the array of throwables, never null
- See Also:
getThrowableList(Throwable)
-
hasCause
public static boolean hasCause(java.lang.Throwable chain, java.lang.Class<? extends java.lang.Throwable> type)
Does the throwable's causal chain have an immediate or wrapped exception of the given type?- Parameters:
chain
- The root of a Throwable causal chain.type
- The exception type to test.- Returns:
- true, if chain is an instance of type or is an UndeclaredThrowableException wrapping a cause.
- Since:
- 3.5
- See Also:
wrapAndThrow(Throwable)
-
indexOf
private static int indexOf(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> type, int fromIndex, boolean subclass)
Worker method for the
indexOfType
methods.- Parameters:
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 -1subclass
- iftrue
, compares withClass.isAssignableFrom(Class)
, otherwise compares using references- Returns:
- index of the
type
within throwables nested within the specifiedthrowable
-
indexOfThrowable
public static int indexOfThrowable(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> 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 - seeindexOfType(Throwable, Class)
for the opposite.A
null
throwable returns-1
. Anull
type returns-1
. No match in the chain returns-1
.- Parameters:
throwable
- the throwable to inspect, may be nullclazz
- the class to search for, subclasses do not match, null returns -1- Returns:
- the index into the throwable chain, -1 if no match or null input
-
indexOfThrowable
public static int indexOfThrowable(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> 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 - seeindexOfType(Throwable, Class, int)
for the opposite.A
null
throwable returns-1
. Anull
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
.- Parameters:
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- Returns:
- the index into the throwable chain, -1 if no match or null input
-
indexOfType
public static int indexOfType(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> 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 - seeindexOfThrowable(Throwable, Class)
for the opposite.A
null
throwable returns-1
. Anull
type returns-1
. No match in the chain returns-1
.- Parameters:
throwable
- the throwable to inspect, may be nulltype
- the type to search for, subclasses match, null returns -1- Returns:
- the index into the throwable chain, -1 if no match or null input
- Since:
- 2.1
-
indexOfType
public static int indexOfType(java.lang.Throwable throwable, java.lang.Class<? extends java.lang.Throwable> 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 - seeindexOfThrowable(Throwable, Class)
for the opposite.A
null
throwable returns-1
. Anull
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
.- Parameters:
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- Returns:
- the index into the throwable chain, -1 if no match or null input
- Since:
- 2.1
-
printRootCauseStackTrace
public static void printRootCauseStackTrace(java.lang.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 output of this method is consistent across JDK versions. Note that this is the opposite order to the JDK1.4 display.
The method is equivalent to
printStackTrace
for throwables that don't have nested causes.- Parameters:
throwable
- the throwable to output- Since:
- 2.0
-
printRootCauseStackTrace
public static void printRootCauseStackTrace(java.lang.Throwable throwable, java.io.PrintStream printStream)
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 output of this method is consistent across JDK versions. Note that this is the opposite order to the JDK1.4 display.
The method is equivalent to
printStackTrace
for throwables that don't have nested causes.- Parameters:
throwable
- the throwable to output, may be nullprintStream
- the stream to output to, may not be null- Throws:
java.lang.NullPointerException
- if the printStream isnull
- Since:
- 2.0
-
printRootCauseStackTrace
public static void printRootCauseStackTrace(java.lang.Throwable throwable, java.io.PrintWriter printWriter)
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 output of this method is consistent across JDK versions. Note that this is the opposite order to the JDK1.4 display.
The method is equivalent to
printStackTrace
for throwables that don't have nested causes.- Parameters:
throwable
- the throwable to output, may be nullprintWriter
- the writer to output to, may not be null- Throws:
java.lang.NullPointerException
- if the printWriter isnull
- Since:
- 2.0
-
removeCommonFrames
public static void removeCommonFrames(java.util.List<java.lang.String> causeFrames, java.util.List<java.lang.String> wrapperFrames)
Removes common frames from the cause trace given the two stack traces.
- Parameters:
causeFrames
- stack trace of a cause throwablewrapperFrames
- stack trace of a wrapper throwable- Throws:
java.lang.IllegalArgumentException
- if either argument is null- Since:
- 2.0
-
rethrow
public static <R> R rethrow(java.lang.Throwable throwable)
Throw a checked exception without adding the exception to the throws clause of the calling method. This method prevents throws clause pollution and reduces the clutter of "Caused by" exceptions in the stacktrace.The use of this technique may be controversial, but exceedingly useful to library developers.
public int propagateExample { // note that there is no throws clause try { return invocation(); // throws IOException } catch (Exception e) { return ExceptionUtils.rethrow(e); // propagates a checked exception } }
This is an alternative to the more conservative approach of wrapping the checked exception in a RuntimeException:
public int wrapExample { // note that there is no throws clause try { return invocation(); // throws IOException } catch (Error e) { throw e; } catch (RuntimeException e) { throw e; // wraps a checked exception } catch (Exception e) { throw new UndeclaredThrowableException(e); // wraps a checked exception } }
One downside to using this approach is that the java compiler will not allow invoking code to specify a checked exception in a catch clause unless there is some code path within the try block that has invoked a method declared with that checked exception. If the invoking site wishes to catch the shaded checked exception, it must either invoke the shaded code through a method re-declaring the desired checked exception, or catch Exception and use the instanceof operator. Either of these techniques are required when interacting with non-java jvm code such as Jython, Scala, or Groovy, since these languages do not consider any exceptions as checked.
- Type Parameters:
R
- The type of the returned value.- Parameters:
throwable
- The throwable to rethrow.- Returns:
- Never actually returned, this generic type matches any type which the calling site requires. "Returning" the results of this method, as done in the propagateExample above, will satisfy the java compiler requirement that all code paths return a value.
- Since:
- 3.5
- See Also:
wrapAndThrow(Throwable)
-
throwableOf
private static <T extends java.lang.Throwable> T throwableOf(java.lang.Throwable throwable, java.lang.Class<T> type, int fromIndex, boolean subclass)
Worker method for the
throwableOfType
methods.- Type Parameters:
T
- the type of Throwable you are searching.- Parameters:
throwable
- the throwable to inspect, may be nulltype
- the type to search, subclasses match, null returns nullfromIndex
- the (zero-based) index of the starting position, negative treated as zero, larger than chain size returns nullsubclass
- iftrue
, compares withClass.isAssignableFrom(Class)
, otherwise compares using references- Returns:
- throwable of the
type
within throwables nested within the specifiedthrowable
-
throwableOfThrowable
public static <T extends java.lang.Throwable> T throwableOfThrowable(java.lang.Throwable throwable, java.lang.Class<T> clazz)
Returns the first
Throwable
that matches the specified class (exactly) in the exception chain. Subclasses of the specified class do not match - seethrowableOfType(Throwable, Class)
for the opposite.A
null
throwable returnsnull
. Anull
type returnsnull
. No match in the chain returnsnull
.- Type Parameters:
T
- the type of Throwable you are searching.- Parameters:
throwable
- the throwable to inspect, may be nullclazz
- the class to search for, subclasses do not match, null returns null- Returns:
- the first matching throwable from the throwable chain, null if no match or null input
- Since:
- 3.10
-
throwableOfThrowable
public static <T extends java.lang.Throwable> T throwableOfThrowable(java.lang.Throwable throwable, java.lang.Class<T> clazz, int fromIndex)
Returns the first
Throwable
that matches the specified type in the exception chain from a specified index. Subclasses of the specified class do not match - seethrowableOfType(Throwable, Class, int)
for the opposite.A
null
throwable returnsnull
. Anull
type returnsnull
. No match in the chain returnsnull
. A negative start index is treated as zero. A start index greater than the number of throwables returnsnull
.- Type Parameters:
T
- the type of Throwable you are searching.- Parameters:
throwable
- the throwable to inspect, may be nullclazz
- the class to search for, subclasses do not match, null returns nullfromIndex
- the (zero-based) index of the starting position, negative treated as zero, larger than chain size returns null- Returns:
- the first matching throwable from the throwable chain, null if no match or null input
- Since:
- 3.10
-
throwableOfType
public static <T extends java.lang.Throwable> T throwableOfType(java.lang.Throwable throwable, java.lang.Class<T> type)
Returns the throwable of the first
Throwable
that matches the specified class or subclass in the exception chain. Subclasses of the specified class do match - seethrowableOfThrowable(Throwable, Class)
for the opposite..A
null
throwable returnsnull
. Anull
type returnsnull
. No match in the chain returnsnull
.- Type Parameters:
T
- the type of Throwable you are searching.- Parameters:
throwable
- the throwable to inspect, may be nulltype
- the type to search for, subclasses match, null returns null- Returns:
- the first matching throwable from the throwable chain, null if no match or null input
- Since:
- 3.10
-
throwableOfType
public static <T extends java.lang.Throwable> T throwableOfType(java.lang.Throwable throwable, java.lang.Class<T> type, int fromIndex)
Returns the first
Throwable
that matches the specified type in the exception chain from a specified index. Subclasses of the specified class do match - seethrowableOfThrowable(Throwable, Class)
for the opposite.A
null
throwable returnsnull
. Anull
type returnsnull
. No match in the chain returnsnull
. A negative start index is treated as zero. A start index greater than the number of throwables returnsnull
.- Type Parameters:
T
- the type of Throwable you are searching.- Parameters:
throwable
- the throwable to inspect, may be nulltype
- the type to search for, subclasses match, null returns nullfromIndex
- the (zero-based) index of the starting position, negative treated as zero, larger than chain size returns null- Returns:
- the first matching throwable from the throwable chain, null if no match or null input
- Since:
- 3.10
-
typeErasure
private static <R,T extends java.lang.Throwable> R typeErasure(java.lang.Throwable throwable) throws T extends java.lang.Throwable
Claim a Throwable is another Exception type using type erasure. This hides a checked exception from the java compiler, allowing a checked exception to be thrown without having the exception in the method's throw clause.- Throws:
T extends java.lang.Throwable
-
wrapAndThrow
public static <R> R wrapAndThrow(java.lang.Throwable throwable)
Throw a checked exception without adding the exception to the throws clause of the calling method. For checked exceptions, this method throws an UndeclaredThrowableException wrapping the checked exception. For Errors and RuntimeExceptions, the original exception is rethrown.The downside to using this approach is that invoking code which needs to handle specific checked exceptions must sniff up the exception chain to determine if the caught exception was caused by the checked exception.
- Type Parameters:
R
- The type of the returned value.- Parameters:
throwable
- The throwable to rethrow.- Returns:
- Never actually returned, this generic type matches any type which the calling site requires. "Returning" the results of this method will satisfy the java compiler requirement that all code paths return a value.
- Since:
- 3.5
- See Also:
rethrow(Throwable)
,hasCause(Throwable, Class)
-
-