Commit 0afd9473 authored by Madhura Bhave's avatar Madhura Bhave

BindFailureAnalyzer should show original failure message

Fixes gh-13122
parent fa21333e
...@@ -70,11 +70,12 @@ class BindFailureAnalyzer extends AbstractFailureAnalyzer<BindException> { ...@@ -70,11 +70,12 @@ class BindFailureAnalyzer extends AbstractFailureAnalyzer<BindException> {
} }
private String getMessage(BindException cause) { private String getMessage(BindException cause) {
if (cause.getCause() != null Throwable failure = cause;
&& StringUtils.hasText(cause.getCause().getMessage())) { while (failure.getCause() != null) {
return cause.getCause().getMessage(); failure = failure.getCause();
} }
return cause.getMessage(); return (StringUtils.hasText(failure.getMessage()) ? failure.getMessage()
: cause.getMessage());
} }
private FailureAnalysis getFailureAnalysis(Object description, BindException cause) { private FailureAnalysis getFailureAnalysis(Object description, BindException cause) {
......
...@@ -77,6 +77,14 @@ public class BindFailureAnalyzerTests { ...@@ -77,6 +77,14 @@ public class BindFailureAnalyzerTests {
} }
} }
@Test
public void bindExceptionWithNestedFailureShouldDisplayNestedMessage() {
FailureAnalysis analysis = performAnalysis(NestedFailureConfiguration.class,
"test.foo.value=hello");
assertThat(analysis.getDescription()).contains(failure("test.foo.value", "hello",
"\"test.foo.value\" from property source \"test\"", "This is a failure"));
}
private static String failure(String property, String value, String origin, private static String failure(String property, String value, String origin,
String reason) { String reason) {
return String.format( return String.format(
...@@ -139,6 +147,11 @@ public class BindFailureAnalyzerTests { ...@@ -139,6 +147,11 @@ public class BindFailureAnalyzerTests {
} }
@EnableConfigurationProperties(NestedFailureProperties.class)
static class NestedFailureConfiguration {
}
@ConfigurationProperties("test.foo") @ConfigurationProperties("test.foo")
@Validated @Validated
static class FieldValidationFailureProperties { static class FieldValidationFailureProperties {
...@@ -201,6 +214,21 @@ public class BindFailureAnalyzerTests { ...@@ -201,6 +214,21 @@ public class BindFailureAnalyzerTests {
} }
@ConfigurationProperties("test.foo")
static class NestedFailureProperties {
private String value;
public String getValue() {
return this.value;
}
public void setValue(String value) {
throw new RuntimeException("This is a failure");
}
}
enum Fruit { enum Fruit {
APPLE, BANANA, ORANGE APPLE, BANANA, ORANGE
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment