Skip to content

Commit acb427d

Browse files
committed
Merge branch '6.1.x'
2 parents c681614 + c74666a commit acb427d

File tree

2 files changed

+34
-18
lines changed

2 files changed

+34
-18
lines changed

spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public Object invoke(MethodInvocation invocation) throws Throwable {
174174
Object returnValue = invocation.proceed();
175175

176176
if (this.adaptViolations) {
177-
this.validationAdapter.applyReturnValueValidation(target, method, null, arguments, groups);
177+
this.validationAdapter.applyReturnValueValidation(target, method, null, returnValue, groups);
178178
}
179179
else {
180180
violations = this.validationAdapter.invokeValidatorForReturnValue(target, method, returnValue, groups);

spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationProxyTests.java

+33-17
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@
2020
import java.lang.annotation.RetentionPolicy;
2121
import java.lang.reflect.Method;
2222

23-
import jakarta.validation.ValidationException;
23+
import jakarta.validation.ConstraintViolationException;
24+
import jakarta.validation.Validation;
2425
import jakarta.validation.Validator;
2526
import jakarta.validation.constraints.Max;
2627
import jakarta.validation.constraints.NotNull;
2728
import jakarta.validation.groups.Default;
2829
import org.aopalliance.intercept.MethodInterceptor;
2930
import org.aopalliance.intercept.MethodInvocation;
3031
import org.junit.jupiter.api.Test;
32+
import org.junit.jupiter.params.ParameterizedTest;
33+
import org.junit.jupiter.params.provider.ValueSource;
3134

3235
import org.springframework.aop.framework.ProxyFactory;
3336
import org.springframework.beans.MutablePropertyValues;
@@ -46,6 +49,7 @@
4649
import org.springframework.util.ClassUtils;
4750
import org.springframework.util.ReflectionUtils;
4851
import org.springframework.validation.annotation.Validated;
52+
import org.springframework.validation.method.MethodValidationException;
4953

5054
import static org.assertj.core.api.Assertions.assertThat;
5155
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@@ -59,27 +63,39 @@
5963
*/
6064
class MethodValidationProxyTests {
6165

62-
@Test
66+
@ParameterizedTest
67+
@ValueSource(booleans = {true, false})
6368
@SuppressWarnings("unchecked")
64-
public void testMethodValidationInterceptor() {
69+
void testMethodValidationInterceptor(boolean adaptViolations) {
6570
MyValidBean bean = new MyValidBean();
6671
ProxyFactory factory = new ProxyFactory(bean);
67-
factory.addAdvice(new MethodValidationInterceptor());
72+
factory.addAdvice(adaptViolations ?
73+
new MethodValidationInterceptor(() -> Validation.buildDefaultValidatorFactory().getValidator(), true) :
74+
new MethodValidationInterceptor());
6875
factory.addAdvisor(new AsyncAnnotationAdvisor());
69-
doTestProxyValidation((MyValidInterface<String>) factory.getProxy());
76+
doTestProxyValidation((MyValidInterface<String>) factory.getProxy(),
77+
(adaptViolations ? MethodValidationException.class : ConstraintViolationException.class));
7078
}
7179

72-
@Test
80+
@ParameterizedTest
81+
@ValueSource(booleans = {true, false})
7382
@SuppressWarnings("unchecked")
74-
public void testMethodValidationPostProcessor() {
83+
void testMethodValidationPostProcessor(boolean adaptViolations) {
7584
StaticApplicationContext context = new StaticApplicationContext();
76-
context.registerSingleton("mvpp", MethodValidationPostProcessor.class);
85+
context.registerBean(MethodValidationPostProcessor.class, adaptViolations ?
86+
() -> {
87+
MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor();
88+
postProcessor.setAdaptConstraintViolations(true);
89+
return postProcessor;
90+
} :
91+
MethodValidationPostProcessor::new);
7792
MutablePropertyValues pvs = new MutablePropertyValues();
7893
pvs.add("beforeExistingAdvisors", false);
7994
context.registerSingleton("aapp", AsyncAnnotationBeanPostProcessor.class, pvs);
8095
context.registerSingleton("bean", MyValidBean.class);
8196
context.refresh();
82-
doTestProxyValidation(context.getBean("bean", MyValidInterface.class));
97+
doTestProxyValidation(context.getBean("bean", MyValidInterface.class),
98+
adaptViolations ? MethodValidationException.class : ConstraintViolationException.class);
8399
context.close();
84100
}
85101

@@ -91,21 +107,21 @@ public void testMethodValidationPostProcessorForInterfaceOnlyProxy() {
91107
context.registerBean(MyValidInterface.class, () ->
92108
ProxyFactory.getProxy(MyValidInterface.class, new MyValidClientInterfaceMethodInterceptor()));
93109
context.refresh();
94-
doTestProxyValidation(context.getBean(MyValidInterface.class));
110+
doTestProxyValidation(context.getBean(MyValidInterface.class), ConstraintViolationException.class);
95111
context.close();
96112
}
97113

98114
@SuppressWarnings("DataFlowIssue")
99-
private void doTestProxyValidation(MyValidInterface<String> proxy) {
115+
private void doTestProxyValidation(MyValidInterface<String> proxy, Class<? extends Exception> expectedExceptionClass) {
100116
assertThat(proxy.myValidMethod("value", 5)).isNotNull();
101-
assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> proxy.myValidMethod("value", 15));
102-
assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> proxy.myValidMethod(null, 5));
103-
assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> proxy.myValidMethod("value", 0));
117+
assertThatExceptionOfType(expectedExceptionClass).isThrownBy(() -> proxy.myValidMethod("value", 15));
118+
assertThatExceptionOfType(expectedExceptionClass).isThrownBy(() -> proxy.myValidMethod(null, 5));
119+
assertThatExceptionOfType(expectedExceptionClass).isThrownBy(() -> proxy.myValidMethod("value", 0));
104120
proxy.myValidAsyncMethod("value", 5);
105-
assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> proxy.myValidAsyncMethod("value", 15));
106-
assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> proxy.myValidAsyncMethod(null, 5));
121+
assertThatExceptionOfType(expectedExceptionClass).isThrownBy(() -> proxy.myValidAsyncMethod("value", 15));
122+
assertThatExceptionOfType(expectedExceptionClass).isThrownBy(() -> proxy.myValidAsyncMethod(null, 5));
107123
assertThat(proxy.myGenericMethod("myValue")).isEqualTo("myValue");
108-
assertThatExceptionOfType(ValidationException.class).isThrownBy(() -> proxy.myGenericMethod(null));
124+
assertThatExceptionOfType(expectedExceptionClass).isThrownBy(() -> proxy.myGenericMethod(null));
109125
}
110126

111127
@Test

0 commit comments

Comments
 (0)