/** * Specifies that a failure has occurred if the {@code failurePredicate} matches the failure. * * @throws NullPointerException if {@code failurePredicate} is null */ public S handleIf(Predicate<? extends Throwable> failurePredicate) { Assert.notNull(failurePredicate, "failurePredicate"); failuresChecked = true; failureConditions.add(failurePredicateFor(failurePredicate)); return (S) this; }
/** * Specifies the failure to retryOn. Any failure that is assignable from the {@code failure} will be handled. * * @throws NullPointerException if {@code failure} is null */ public S handle(Class<? extends Throwable> failure) { Assert.notNull(failure, "failure"); return handle(Arrays.asList(failure)); }
/** * Specifies that a failure has occurred if the {@code result} matches the execution result. */ public S handleResult(R result) { failureConditions.add(resultPredicateFor(result)); return (S) this; }
/** * Returns whether the {@code result} is a success according to the policy. If the {code result} has no result, it is * not a failure. */ protected boolean isFailure(ExecutionResult result) { if (result.isNonResult()) return false; else if (policy instanceof FailurePolicy) return ((FailurePolicy) policy).isFailure(result); else return result.getFailure() != null; }
/** * Returns whether an execution result can be retried given the configured failure conditions. * * @see #handle(Class...) * @see #handle(List) * @see #handleIf(BiPredicate) * @see #handleIf(Predicate) * @see #handleResult(R) * @see #handleResultIf(Predicate) */ boolean isFailure(ExecutionResult result) { return failureConditions.isEmpty() ? result.getFailure() != null : isFailure((R) result.getResult(), result.getFailure()); }
/** * Specifies the failures to retryOn. Any failures that are assignable from the {@code failures} will be handled. * * @throws NullPointerException if {@code failures} is null * @throws IllegalArgumentException if failures is empty */ public S handle(Class<? extends Throwable>... failures) { Assert.notNull(failures, "failures"); Assert.isTrue(failures.length > 0, "Failures cannot be empty"); return handle(Arrays.asList(failures)); }
/** * Specifies that a failure has occurred if the {@code resultPredicate} matches the execution result. * * @throws NullPointerException if {@code resultPredicate} is null */ public S handleResultIf(Predicate<R> resultPredicate) { Assert.notNull(resultPredicate, "resultPredicate"); failureConditions.add(resultPredicateFor(resultPredicate)); return (S) this; }
/** * Specifies the failures to retryOn. Any failures that are assignable from the {@code failures} will be handled. * * @throws NullPointerException if {@code failures} is null * @throws IllegalArgumentException if failures is null or empty */ public S handle(List<Class<? extends Throwable>> failures) { Assert.notNull(failures, "failures"); Assert.isTrue(!failures.isEmpty(), "failures cannot be empty"); failuresChecked = true; failureConditions.add(failurePredicateFor(failures)); return (S) this; }