Skip to content

Commit 88bc504

Browse files
committed
Skip validation constraint hint inference if no provider available
Closes gh-30130
1 parent 3af8efb commit 88bc504

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

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

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Set;
2222

2323
import jakarta.validation.ConstraintValidator;
24+
import jakarta.validation.NoProviderFoundException;
2425
import jakarta.validation.Validation;
2526
import jakarta.validation.Validator;
2627
import jakarta.validation.metadata.BeanDescriptor;
@@ -48,6 +49,7 @@
4849
* required for {@link ConstraintValidator}s.
4950
*
5051
* @author Sebastien Deleuze
52+
* @author Juergen Hoeller
5153
* @since 6.0.5
5254
*/
5355
class BeanValidationBeanRegistrationAotProcessor implements BeanRegistrationAotProcessor {
@@ -57,21 +59,39 @@ class BeanValidationBeanRegistrationAotProcessor implements BeanRegistrationAotP
5759

5860
private static final Log logger = LogFactory.getLog(BeanValidationBeanRegistrationAotProcessor.class);
5961

60-
@Nullable
62+
6163
@Override
64+
@Nullable
6265
public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
6366
if (isBeanValidationPresent) {
6467
return BeanValidationDelegate.processAheadOfTime(registeredBean);
6568
}
6669
return null;
6770
}
6871

72+
6973
private static class BeanValidationDelegate {
7074

71-
private static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
75+
@Nullable
76+
private static final Validator validator = getValidatorIfAvailable();
77+
78+
@Nullable
79+
private static Validator getValidatorIfAvailable() {
80+
try {
81+
return Validation.buildDefaultValidatorFactory().getValidator();
82+
}
83+
catch (NoProviderFoundException ex) {
84+
logger.info("No Bean Validation provider available - skipping validation constraint hint inference");
85+
return null;
86+
}
87+
}
7288

7389
@Nullable
7490
public static BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
91+
if (validator == null) {
92+
return null;
93+
}
94+
7595
BeanDescriptor descriptor;
7696
try {
7797
descriptor = validator.getConstraintsForClass(registeredBean.getBeanClass());
@@ -88,6 +108,7 @@ public static BeanRegistrationAotContribution processAheadOfTime(RegisteredBean
88108
}
89109
return null;
90110
}
111+
91112
Set<ConstraintDescriptor<?>> constraintDescriptors = new HashSet<>();
92113
for (MethodDescriptor methodDescriptor : descriptor.getConstrainedMethods(MethodType.NON_GETTER, MethodType.GETTER)) {
93114
for (ParameterDescriptor parameterDescriptor : methodDescriptor.getParameterDescriptors()) {
@@ -107,9 +128,9 @@ public static BeanRegistrationAotContribution processAheadOfTime(RegisteredBean
107128
}
108129
return null;
109130
}
110-
111131
}
112132

133+
113134
private static class BeanValidationBeanRegistrationAotContribution implements BeanRegistrationAotContribution {
114135

115136
private final Collection<ConstraintDescriptor<?>> constraintDescriptors;

0 commit comments

Comments
 (0)