public final class ExceptionUtils extends Object
Modifier and Type | Field and Description |
---|---|
static String |
STRINGIFIED_NULL_EXCEPTION
The stringified representation of a null exception reference.
|
Modifier and Type | Method and Description |
---|---|
static <T extends Throwable> |
assertThrowable(Throwable throwable,
Class<T> searchType)
The same as
findThrowable(Throwable, Class) , but rethrows original exception if the
expected exception was not found. |
static <T extends Throwable> |
assertThrowableWithMessage(Throwable throwable,
String searchMessage)
The same as
findThrowableWithMessage(Throwable, String) , but rethrows original
exception if the expected exception was not found. |
static void |
checkInterrupted(Throwable e)
Checks whether the given exception is a
InterruptedException and sets the interrupted
flag accordingly. |
static <T extends Throwable> |
findThrowable(Throwable throwable,
Class<T> searchType)
Checks whether a throwable chain contains a specific type of exception and returns it.
|
static Optional<Throwable> |
findThrowable(Throwable throwable,
java.util.function.Predicate<Throwable> predicate)
Checks whether a throwable chain contains an exception matching a predicate and returns it.
|
static Optional<Throwable> |
findThrowableWithMessage(Throwable throwable,
String searchMessage)
Checks whether a throwable chain contains a specific error message and returns the
corresponding throwable.
|
static <T extends Throwable> |
firstOrSuppressed(T newException,
T previous)
Adds a new exception as a
suppressed exception to
a prior exception, or returns the new exception, if no prior exception exists. |
static boolean |
isDirectOutOfMemoryError(Throwable t)
Checks whether the given exception indicates a JVM direct out-of-memory error.
|
static boolean |
isHeapSpaceOutOfMemoryError(Throwable t) |
static boolean |
isJvmFatalError(Throwable t)
Checks whether the given exception indicates a situation that may leave the JVM in a
corrupted state, meaning a state where continued normal operation can only be guaranteed via
clean process restart.
|
static boolean |
isJvmFatalOrOutOfMemoryError(Throwable t)
Checks whether the given exception indicates a situation that may leave the JVM in a
corrupted state, or an out-of-memory error.
|
static boolean |
isMetaspaceOutOfMemoryError(Throwable t)
Checks whether the given exception indicates a JVM metaspace out-of-memory error.
|
static void |
rethrow(Throwable t)
Throws the given
Throwable in scenarios where the signatures do not allow you to
throw an arbitrary Throwable. |
static void |
rethrow(Throwable t,
String parentMessage)
Throws the given
Throwable in scenarios where the signatures do not allow you to
throw an arbitrary Throwable. |
static void |
rethrowException(Throwable t)
Throws the given
Throwable in scenarios where the signatures do allow to throw a
Exception. |
static void |
rethrowException(Throwable t,
String parentMessage)
Throws the given
Throwable in scenarios where the signatures do allow to throw a
Exception. |
static void |
rethrowIfFatalError(Throwable t)
Rethrows the given
Throwable , if it represents an error that is fatal to the JVM. |
static void |
rethrowIfFatalErrorOrOOM(Throwable t)
Rethrows the given
Throwable , if it represents an error that is fatal to the JVM or
an out-of-memory error. |
static void |
rethrowIOException(Throwable t)
Re-throws the given
Throwable in scenarios where the signatures allows only
IOExceptions (and RuntimeException and Error). |
static String |
stringifyException(Throwable e)
Makes a string representation of the exception's stack trace, or "(null)", if the exception
is null.
|
static Throwable |
stripCompletionException(Throwable throwable)
Unpacks an
CompletionException and returns its cause. |
static Throwable |
stripException(Throwable throwableToStrip,
Class<? extends Throwable> typeToStrip)
Unpacks an specified exception and returns its cause.
|
static Throwable |
stripExecutionException(Throwable throwable)
Unpacks an
ExecutionException and returns its cause. |
static void |
throwMultiException(List<Exception> exceptions) |
static void |
tryEnrichOutOfMemoryError(Throwable root,
String jvmMetaspaceOomNewErrorMessage,
String jvmDirectOomNewErrorMessage,
String jvmHeapSpaceOomNewErrorMessage)
Tries to enrich OutOfMemoryErrors being part of the passed root Throwable's cause tree.
|
static void |
tryRethrowException(Exception e)
Tries to throw the given exception if not null.
|
static void |
tryRethrowIOException(Throwable t)
Tries to throw the given
Throwable in scenarios where the signatures allows only
IOExceptions (and RuntimeException and Error). |
static void |
updateDetailMessage(Throwable root,
java.util.function.Function<Throwable,String> throwableToMessage)
Updates error messages of Throwables appearing in the cause tree of the passed root
Throwable.
|
public static final String STRINGIFIED_NULL_EXCEPTION
public static String stringifyException(Throwable e)
This method makes a best effort and never fails.
e
- The exception to stringify.public static boolean isJvmFatalError(Throwable t)
Currently considered fatal exceptions are Virtual Machine errors indicating that the JVM
is corrupted, like InternalError
, UnknownError
, and ZipError
(a special case of InternalError). The ThreadDeath
exception
is also treated as a fatal error, because when a thread is forcefully stopped, there is a
high chance that parts of the system are in an inconsistent state.
t
- The exception to check.public static boolean isJvmFatalOrOutOfMemoryError(Throwable t)
See isJvmFatalError(Throwable)
for a list of fatal JVM errors. This
method additionally classifies the OutOfMemoryError
as fatal, because it may occur in
any thread (not the one that allocated the majority of the memory) and thus is often not
recoverable by destroying the particular thread that threw the exception.
t
- The exception to check.public static void tryEnrichOutOfMemoryError(@Nullable Throwable root, @Nullable String jvmMetaspaceOomNewErrorMessage, @Nullable String jvmDirectOomNewErrorMessage, @Nullable String jvmHeapSpaceOomNewErrorMessage)
This method improves error messages for direct and metaspace OutOfMemoryError
. It
adds description about the possible causes and ways of resolution.
root
- The Throwable of which the cause tree shall be traversed.jvmMetaspaceOomNewErrorMessage
- The message being used for JVM metaspace-related
OutOfMemoryErrors. Passing null
will disable handling this class of error.jvmDirectOomNewErrorMessage
- The message being used for direct memory-related
OutOfMemoryErrors. Passing null
will disable handling this class of error.jvmHeapSpaceOomNewErrorMessage
- The message being used for Heap space-related
OutOfMemoryErrors. Passing null
will disable handling this class of error.public static void updateDetailMessage(@Nullable Throwable root, @Nullable java.util.function.Function<Throwable,String> throwableToMessage)
null
, instead, won't trigger any detailMessage update on that Throwable.root
- The Throwable whose cause tree shall be traversed.throwableToMessage
- The Function based on which the new messages are generated. The
function implementation should return the new message. Returning null
, in
contrast, will result in not updating the message for the corresponding Throwable.public static boolean isMetaspaceOutOfMemoryError(@Nullable Throwable t)
t
- The exception to check.OutOfMemoryError
, false otherwise.public static boolean isDirectOutOfMemoryError(@Nullable Throwable t)
t
- The exception to check.OutOfMemoryError
, false otherwise.public static boolean isHeapSpaceOutOfMemoryError(@Nullable Throwable t)
public static void rethrowIfFatalError(Throwable t)
Throwable
, if it represents an error that is fatal to the JVM. See
isJvmFatalError(Throwable)
for a definition of fatal errors.t
- The Throwable to check and rethrow.public static void rethrowIfFatalErrorOrOOM(Throwable t)
Throwable
, if it represents an error that is fatal to the JVM or
an out-of-memory error. See isJvmFatalError(Throwable)
for a
definition of fatal errors.t
- The Throwable to check and rethrow.public static <T extends Throwable> T firstOrSuppressed(T newException, @Nullable T previous)
suppressed exception
to
a prior exception, or returns the new exception, if no prior exception exists.
public void closeAllThings() throws Exception {
Exception ex = null;
try {
component.shutdown();
} catch (Exception e) {
ex = firstOrSuppressed(e, ex);
}
try {
anotherComponent.stop();
} catch (Exception e) {
ex = firstOrSuppressed(e, ex);
}
try {
lastComponent.shutdown();
} catch (Exception e) {
ex = firstOrSuppressed(e, ex);
}
if (ex != null) {
throw ex;
}
}
newException
- The newly occurred exceptionprevious
- The previously occurred exception, possibly null.public static void rethrow(Throwable t)
Throwable
in scenarios where the signatures do not allow you to
throw an arbitrary Throwable. Errors and RuntimeExceptions are thrown directly, other
exceptions are packed into runtime exceptionst
- The throwable to be thrown.public static void rethrow(Throwable t, String parentMessage)
Throwable
in scenarios where the signatures do not allow you to
throw an arbitrary Throwable. Errors and RuntimeExceptions are thrown directly, other
exceptions are packed into a parent RuntimeException.t
- The throwable to be thrown.parentMessage
- The message for the parent RuntimeException, if one is needed.public static void rethrowException(Throwable t, String parentMessage) throws Exception
Throwable
in scenarios where the signatures do allow to throw a
Exception. Errors and Exceptions are thrown directly, other "exotic" subclasses of Throwable
are wrapped in an Exception.t
- The throwable to be thrown.parentMessage
- The message for the parent Exception, if one is needed.Exception
public static void rethrowException(Throwable t) throws Exception
Throwable
in scenarios where the signatures do allow to throw a
Exception. Errors and Exceptions are thrown directly, other "exotic" subclasses of Throwable
are wrapped in an Exception.t
- The throwable to be thrown.Exception
public static void tryRethrowException(@Nullable Exception e) throws Exception
e
- exception to throw if not null.Exception
public static void tryRethrowIOException(Throwable t) throws IOException
Throwable
in scenarios where the signatures allows only
IOExceptions (and RuntimeException and Error). Throws this exception directly, if it is an
IOException, a RuntimeException, or an Error. Otherwise does nothing.t
- The Throwable to be thrown.IOException
public static void rethrowIOException(Throwable t) throws IOException
Throwable
in scenarios where the signatures allows only
IOExceptions (and RuntimeException and Error).
Throws this exception directly, if it is an IOException, a RuntimeException, or an Error. Otherwise it wraps it in an IOException and throws it.
t
- The Throwable to be thrown.IOException
public static <T extends Throwable> Optional<T> findThrowable(Throwable throwable, Class<T> searchType)
throwable
- the throwable chain to check.searchType
- the type of exception to search for in the chain.public static <T extends Throwable> void assertThrowable(Throwable throwable, Class<T> searchType) throws T extends Throwable
findThrowable(Throwable, Class)
, but rethrows original exception if the
expected exception was not found.T extends Throwable
public static Optional<Throwable> findThrowable(Throwable throwable, java.util.function.Predicate<Throwable> predicate)
throwable
- the throwable chain to check.predicate
- the predicate of the exception to search for in the chain.public static Optional<Throwable> findThrowableWithMessage(Throwable throwable, String searchMessage)
throwable
- the throwable chain to check.searchMessage
- the error message to search for in the chain.public static <T extends Throwable> void assertThrowableWithMessage(Throwable throwable, String searchMessage) throws T extends Throwable
findThrowableWithMessage(Throwable, String)
, but rethrows original
exception if the expected exception was not found.T extends Throwable
public static Throwable stripExecutionException(Throwable throwable)
ExecutionException
and returns its cause. Otherwise the given Throwable is
returned.throwable
- to unpack if it is an ExecutionExceptionpublic static Throwable stripCompletionException(Throwable throwable)
CompletionException
and returns its cause. Otherwise the given Throwable
is returned.throwable
- to unpack if it is an CompletionExceptionpublic static Throwable stripException(Throwable throwableToStrip, Class<? extends Throwable> typeToStrip)
Throwable
is returned.throwableToStrip
- to striptypeToStrip
- type to strippublic static void checkInterrupted(Throwable e)
InterruptedException
and sets the interrupted
flag accordingly.e
- to check whether it is an InterruptedException
Copyright © 2023–2024 The Apache Software Foundation. All rights reserved.