Browse Source

Invert order of suppressed exceptions (for common exception rendering)

See gh-35057
pull/35129/head
Juergen Hoeller 6 months ago
parent
commit
e828bbbb0a
  1. 5
      spring-core/src/main/java/org/springframework/core/retry/RetryTemplate.java
  2. 4
      spring-core/src/test/java/org/springframework/core/retry/RetryTemplateTests.java

5
spring-core/src/main/java/org/springframework/core/retry/RetryTemplate.java

@ -19,7 +19,6 @@ package org.springframework.core.retry; @@ -19,7 +19,6 @@ package org.springframework.core.retry;
import java.time.Duration;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
import org.jspecify.annotations.Nullable;
@ -203,9 +202,7 @@ public class RetryTemplate implements RetryOperations { @@ -203,9 +202,7 @@ public class RetryTemplate implements RetryOperations {
RetryException finalException = new RetryException(
"Retry policy for operation '%s' exhausted; aborting execution".formatted(retryableName),
exceptions.removeLast());
for (Iterator<Throwable> it = exceptions.descendingIterator(); it.hasNext();) {
finalException.addSuppressed(it.next());
}
exceptions.forEach(finalException::addSuppressed);
this.retryListener.onRetryPolicyExhaustion(retryExecution, finalException);
throw finalException;
}

4
spring-core/src/test/java/org/springframework/core/retry/RetryTemplateTests.java

@ -178,8 +178,8 @@ class RetryTemplateTests { @@ -178,8 +178,8 @@ class RetryTemplateTests {
.withMessage("Retry policy for operation 'test' exhausted; aborting execution")
.withCauseExactlyInstanceOf(IllegalStateException.class)
.satisfies(hasSuppressedExceptionsSatisfyingExactly(
suppressed1 -> assertThat(suppressed1).isExactlyInstanceOf(IOException.class),
suppressed2 -> assertThat(suppressed2).isExactlyInstanceOf(FileNotFoundException.class)
suppressed1 -> assertThat(suppressed1).isExactlyInstanceOf(FileNotFoundException.class),
suppressed2 -> assertThat(suppressed2).isExactlyInstanceOf(IOException.class)
));
// 3 = 1 initial invocation + 2 retry attempts
assertThat(invocationCount).hasValue(3);

Loading…
Cancel
Save