Browse Source

Polish "Allow validation api without implementation"

Closes gh-12669
pull/12721/merge
Phillip Webb 8 years ago
parent
commit
0c98d0e7d3
  1. 23
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBinder.java
  2. 10
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesJsr303Validator.java
  3. 7
      spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/ValidationExceptionFailureAnalyzerTests.java

23
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBinder.java

@ -55,7 +55,9 @@ class ConfigurationPropertiesBinder { @@ -55,7 +55,9 @@ class ConfigurationPropertiesBinder {
private final Validator configurationPropertiesValidator;
private Validator jsr303Validator;
private final boolean jsr303Present;
private volatile Validator jsr303Validator;
private volatile Binder binder;
@ -66,7 +68,8 @@ class ConfigurationPropertiesBinder { @@ -66,7 +68,8 @@ class ConfigurationPropertiesBinder {
.getPropertySources();
this.configurationPropertiesValidator = getConfigurationPropertiesValidator(
applicationContext, validatorBeanName);
this.jsr303Present = ConfigurationPropertiesJsr303Validator
.isJsr303Present(applicationContext);
}
public void bind(Bindable<?> target) {
@ -92,12 +95,8 @@ class ConfigurationPropertiesBinder { @@ -92,12 +95,8 @@ class ConfigurationPropertiesBinder {
if (this.configurationPropertiesValidator != null) {
validators.add(this.configurationPropertiesValidator);
}
if (target.getAnnotation(Validated.class) != null) {
this.jsr303Validator = ConfigurationPropertiesJsr303Validator.getIfJsr303Present(this.applicationContext);
if (this.jsr303Validator != null) {
validators.add(this.jsr303Validator);
}
if (this.jsr303Present && target.getAnnotation(Validated.class) != null) {
validators.add(getJsr303Validator());
}
if (target.getValue() != null && target.getValue().get() instanceof Validator) {
validators.add((Validator) target.getValue().get());
@ -105,6 +104,14 @@ class ConfigurationPropertiesBinder { @@ -105,6 +104,14 @@ class ConfigurationPropertiesBinder {
return validators;
}
private Validator getJsr303Validator() {
if (this.jsr303Validator == null) {
this.jsr303Validator = new ConfigurationPropertiesJsr303Validator(
this.applicationContext);
}
return this.jsr303Validator;
}
private BindHandler getBindHandler(ConfigurationProperties annotation,
List<Validator> validators) {
BindHandler handler = new IgnoreTopLevelConverterNotFoundBindHandler();

10
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesJsr303Validator.java

@ -38,8 +38,7 @@ final class ConfigurationPropertiesJsr303Validator implements Validator { @@ -38,8 +38,7 @@ final class ConfigurationPropertiesJsr303Validator implements Validator {
private final Delegate delegate;
private ConfigurationPropertiesJsr303Validator(
ApplicationContext applicationContext) {
ConfigurationPropertiesJsr303Validator(ApplicationContext applicationContext) {
this.delegate = new Delegate(applicationContext);
}
@ -53,15 +52,14 @@ final class ConfigurationPropertiesJsr303Validator implements Validator { @@ -53,15 +52,14 @@ final class ConfigurationPropertiesJsr303Validator implements Validator {
this.delegate.validate(target, errors);
}
public static ConfigurationPropertiesJsr303Validator getIfJsr303Present(
ApplicationContext applicationContext) {
public static boolean isJsr303Present(ApplicationContext applicationContext) {
ClassLoader classLoader = applicationContext.getClassLoader();
for (String validatorClass : VALIDATOR_CLASSES) {
if (!ClassUtils.isPresent(validatorClass, classLoader)) {
return null;
return false;
}
}
return new ConfigurationPropertiesJsr303Validator(applicationContext);
return true;
}
private static class Delegate extends LocalValidatorFactoryBean {

7
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/ValidationExceptionFailureAnalyzerTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -54,7 +54,8 @@ public class ValidationExceptionFailureAnalyzerTests { @@ -54,7 +54,8 @@ public class ValidationExceptionFailureAnalyzerTests {
@Test
public void nonValidatedPropertiesTest() {
new AnnotationConfigApplicationContext(NonValidatedTestConfiguration.class).close();
new AnnotationConfigApplicationContext(NonValidatedTestConfiguration.class)
.close();
}
@EnableConfigurationProperties(TestProperties.class)
@ -71,7 +72,6 @@ public class ValidationExceptionFailureAnalyzerTests { @@ -71,7 +72,6 @@ public class ValidationExceptionFailureAnalyzerTests {
}
@EnableConfigurationProperties(NonValidatedTestProperties.class)
static class NonValidatedTestConfiguration {
@ -84,4 +84,5 @@ public class ValidationExceptionFailureAnalyzerTests { @@ -84,4 +84,5 @@ public class ValidationExceptionFailureAnalyzerTests {
private static class NonValidatedTestProperties {
}
}

Loading…
Cancel
Save