MethodValidationInterceptor excludes FactoryBean metadata methods
Issue: SPR-17374
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-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.
|
||||
@@ -28,6 +28,8 @@ import javax.validation.executable.ExecutableValidator;
|
||||
import org.aopalliance.intercept.MethodInterceptor;
|
||||
import org.aopalliance.intercept.MethodInvocation;
|
||||
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.beans.factory.SmartFactoryBean;
|
||||
import org.springframework.core.BridgeMethodResolver;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.util.ClassUtils;
|
||||
@@ -86,6 +88,11 @@ public class MethodValidationInterceptor implements MethodInterceptor {
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object invoke(MethodInvocation invocation) throws Throwable {
|
||||
// Avoid Validator invocation on FactoryBean.getObjectType/isSingleton
|
||||
if (isFactoryBeanMetadataMethod(invocation.getMethod())) {
|
||||
return invocation.proceed();
|
||||
}
|
||||
|
||||
Class<?>[] groups = determineValidationGroups(invocation);
|
||||
|
||||
// Standard Bean Validation 1.1 API
|
||||
@@ -119,6 +126,12 @@ public class MethodValidationInterceptor implements MethodInterceptor {
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
private boolean isFactoryBeanMetadataMethod(Method method) {
|
||||
Class<?> clazz = method.getDeclaringClass();
|
||||
return ((clazz == FactoryBean.class || clazz == SmartFactoryBean.class) &&
|
||||
!method.getName().equals("getObject"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the validation groups to validate against for the given method invocation.
|
||||
* <p>Default are the validation groups as specified in the {@link Validated} annotation
|
||||
|
||||
Reference in New Issue
Block a user