Browse Source

Avoid reflection on OptionalValidatorFactoryBean

Closes gh-28939
pull/28944/head
Stephane Nicoll 3 years ago
parent
commit
cd2b7afc87
  1. 9
      spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java
  2. 11
      spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java
  3. 11
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

9
spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java

@ -22,7 +22,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
@ -71,6 +70,7 @@ import org.springframework.util.PathMatcher;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.validation.Errors; import org.springframework.validation.Errors;
import org.springframework.validation.Validator; import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean;
/** /**
* Provides essential configuration for handling messages with simple messaging * Provides essential configuration for handling messages with simple messaging
@ -550,15 +550,12 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
validator = this.applicationContext.getBean(MVC_VALIDATOR_NAME, Validator.class); validator = this.applicationContext.getBean(MVC_VALIDATOR_NAME, Validator.class);
} }
else if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) { else if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) {
Class<?> clazz;
try { try {
String className = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"; validator = new OptionalValidatorFactoryBean();
clazz = ClassUtils.forName(className, AbstractMessageBrokerConfiguration.class.getClassLoader());
} }
catch (Throwable ex) { catch (Throwable ex) {
throw new BeanInitializationException("Could not find default validator class", ex); throw new BeanInitializationException("Failed to create default validator", ex);
} }
validator = (Validator) BeanUtils.instantiateClass(clazz);
} }
else { else {
validator = new Validator() { validator = new Validator() {

11
spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java

@ -22,7 +22,6 @@ import java.util.function.Predicate;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
@ -45,6 +44,7 @@ import org.springframework.util.ClassUtils;
import org.springframework.validation.Errors; import org.springframework.validation.Errors;
import org.springframework.validation.MessageCodesResolver; import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator; import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean;
import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.WebAnnotationsRuntimeHintsRegistrar; import org.springframework.web.bind.annotation.WebAnnotationsRuntimeHintsRegistrar;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer; import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
@ -388,15 +388,12 @@ public class WebFluxConfigurationSupport implements ApplicationContextAware {
Validator validator = getValidator(); Validator validator = getValidator();
if (validator == null) { if (validator == null) {
if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) { if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) {
Class<?> clazz;
try { try {
String name = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"; validator = new OptionalValidatorFactoryBean();
clazz = ClassUtils.forName(name, getClass().getClassLoader());
} }
catch (ClassNotFoundException | LinkageError ex) { catch (Throwable ex) {
throw new BeanInitializationException("Failed to resolve default validator class", ex); throw new BeanInitializationException("Failed to create default validator", ex);
} }
validator = (Validator) BeanUtils.instantiateClass(clazz);
} }
else { else {
validator = new NoOpValidator(); validator = new NoOpValidator();

11
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

@ -25,7 +25,6 @@ import java.util.Map;
import jakarta.servlet.ServletContext; import jakarta.servlet.ServletContext;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
@ -68,6 +67,7 @@ import org.springframework.util.PathMatcher;
import org.springframework.validation.Errors; import org.springframework.validation.Errors;
import org.springframework.validation.MessageCodesResolver; import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator; import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean;
import org.springframework.web.HttpRequestHandler; import org.springframework.web.HttpRequestHandler;
import org.springframework.web.accept.ContentNegotiationManager; import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.WebDataBinder;
@ -760,15 +760,12 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
Validator validator = getValidator(); Validator validator = getValidator();
if (validator == null) { if (validator == null) {
if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) { if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) {
Class<?> clazz;
try { try {
String className = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"; validator = new OptionalValidatorFactoryBean();
clazz = ClassUtils.forName(className, WebMvcConfigurationSupport.class.getClassLoader());
} }
catch (ClassNotFoundException | LinkageError ex) { catch (Throwable ex) {
throw new BeanInitializationException("Failed to resolve default validator class", ex); throw new BeanInitializationException("Failed to create default validator", ex);
} }
validator = (Validator) BeanUtils.instantiateClass(clazz);
} }
else { else {
validator = new NoOpValidator(); validator = new NoOpValidator();

Loading…
Cancel
Save