Skip to content
This repository was archived by the owner on Jul 27, 2026. It is now read-only.
This repository was archived by the owner on Jul 27, 2026. It is now read-only.

Rethrow undeclared exceptions #261

Description

@ttulka

Not sure if this is a "works as designed" problem, but it seems to be useful to support this use-case.
So far, I was not able to make it work:

I need the retry mechanism to be triggered only for declared exceptions and let others be rethrown.

With this code:

@Retryable(include = {ToRetryException.class}, recover = "recoverRetrieveFromExternal")
public String retrieveFromExternal(String arg) {
    return externalService.retrieve(arg);
}
@Recover
private String recoverRetrieveFromExternal(Throwable t, String arg) {
    return "Recover: " + arg;
}

When an exception different from ToRetryException is thrown by externalService.retrieve(arg) the recover fallback is used.

With stateful = true, all exceptions including ToRetryException are rethrown.

Basically, I need this test suite to pass:

@Test
void ok() {
    when(externalService.retrieve(anyString())).thenReturn("TEST");
    assertThat(client.retrieveFromExternal("")).isEqualTo("TEST");
}
@Test
void rethrows_the_exception() {
    when(externalService.retrieve(anyString())).thenThrow(new RuntimeException());
    assertThrows(RuntimeException.class, () -> client.retrieveFromExternal(""));
}
@Test
void retries_and_recovers() {
    when(externalService.retrieve(anyString())).thenThrow(new ToRetryException());
    assertThat(client.retrieveFromExternal("test")).isEqualTo("Recover: test");
}

Is there a way to do that? Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions