diff --git a/src/main/java/org/springframework/data/r2dbc/support/AbstractFallbackR2dbcExceptionTranslator.java b/src/main/java/org/springframework/data/r2dbc/support/AbstractFallbackR2dbcExceptionTranslator.java index 139ea8b..9e12a7d 100644 --- a/src/main/java/org/springframework/data/r2dbc/support/AbstractFallbackR2dbcExceptionTranslator.java +++ b/src/main/java/org/springframework/data/r2dbc/support/AbstractFallbackR2dbcExceptionTranslator.java @@ -111,6 +111,11 @@ public abstract class AbstractFallbackR2dbcExceptionTranslator implements R2dbcE * @return the message {@code String} to use. */ protected String buildMessage(String task, @Nullable String sql, R2dbcException ex) { - return task + "; " + (sql != null ? "SQL [" + sql + "]; " : "") + ex.getMessage(); + + return task + "; " + // + (sql != null // + ? "SQL [" + sql + "]; " // + : "" // + ) + ex.getMessage(); } } diff --git a/src/test/java/org/springframework/data/r2dbc/support/R2dbcExceptionSubclassTranslatorUnitTests.java b/src/test/java/org/springframework/data/r2dbc/support/R2dbcExceptionSubclassTranslatorUnitTests.java index c65f090..246a104 100644 --- a/src/test/java/org/springframework/data/r2dbc/support/R2dbcExceptionSubclassTranslatorUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/support/R2dbcExceptionSubclassTranslatorUnitTests.java @@ -27,7 +27,6 @@ import io.r2dbc.spi.R2dbcTimeoutException; import io.r2dbc.spi.R2dbcTransientResourceException; import org.junit.Test; - import org.springframework.dao.ConcurrencyFailureException; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.dao.DataIntegrityViolationException; @@ -49,9 +48,10 @@ public class R2dbcExceptionSubclassTranslatorUnitTests { @Test // gh-57 public void shouldTranslateTransientResourceException() { - Exception exception = translator.translate("", "", new R2dbcTransientResourceException()); + Exception exception = translator.translate("", "", new R2dbcTransientResourceException("")); - assertThat(exception).isInstanceOf(TransientDataAccessResourceException.class); + assertThat(exception) + .isInstanceOf(TransientDataAccessResourceException.class); } @Test // gh-57 @@ -110,5 +110,35 @@ public class R2dbcExceptionSubclassTranslatorUnitTests { assertThat(exception).isInstanceOf(BadSqlGrammarException.class); } + @Test // gh-57 + public void messageGeneration() { + + Exception exception = translator.translate("TASK", "SOME-SQL", new R2dbcTransientResourceException("MESSAGE")); + + assertThat(exception) // + .isInstanceOf(TransientDataAccessResourceException.class) // + .hasMessage("TASK; SQL [SOME-SQL]; MESSAGE; nested exception is io.r2dbc.spi.R2dbcTransientResourceException: MESSAGE"); + } + + @Test // gh-57 + public void messageGenerationNullSQL() { + + Exception exception = translator.translate("TASK", null, new R2dbcTransientResourceException("MESSAGE")); + + assertThat(exception) // + .isInstanceOf(TransientDataAccessResourceException.class) // + .hasMessage("TASK; MESSAGE; nested exception is io.r2dbc.spi.R2dbcTransientResourceException: MESSAGE"); + } + + @Test // gh-57 + public void messageGenerationNullMessage() { + + Exception exception = translator.translate("TASK", "SOME-SQL", new R2dbcTransientResourceException()); + + assertThat(exception) // + .isInstanceOf(TransientDataAccessResourceException.class) // + .hasMessage("TASK; SQL [SOME-SQL]; null; nested exception is io.r2dbc.spi.R2dbcTransientResourceException"); + } + private static class MyTransientExceptions extends R2dbcException {} }