in safeguard-impl/src/main/java/org/apache/safeguard/impl/asynchronous/BaseAsynchronousInterceptor.java [206:238]
protected Future<T> onException(final Throwable cause) throws ExecutionException {
if (!Exception.class.isInstance(cause)) {
if (Error.class.isInstance(cause)) {
throw Error.class.cast(cause);
}
throw new IllegalStateException(cause);
}
final Exception ex = Exception.class.cast(cause);
final ErrorHandler<Exception, Future<?>> handler = getErrorHandler(data);
if (handler != null) {
try {
return (Future<T>) handler.apply(ex);
} catch (final Exception e) {
if (ExecutionException.class.isInstance(e)) {
throw ExecutionException.class.cast(e);
}
if (RuntimeException.class.isInstance(e)) {
throw RuntimeException.class.cast(e);
}
if (Error.class.isInstance(e)) {
throw Error.class.cast(e);
}
throw new IllegalStateException(e);
}
}
if (ExecutionException.class.isInstance(cause)) {
throw ExecutionException.class.cast(cause);
}
if (RuntimeException.class.isInstance(cause)) {
throw RuntimeException.class.cast(cause);
}
throw new IllegalStateException(cause); // unreachable - just for compiler
}