Issue #3801 Do not use CDI with bean validation when it is not available
- fixes osgi-functional-tests
Signed-off-by: David Matejcek <dmatej@seznam.cz>
diff --git a/ext/bean-validation/pom.xml b/ext/bean-validation/pom.xml
index e473c17..9d10baf 100644
--- a/ext/bean-validation/pom.xml
+++ b/ext/bean-validation/pom.xml
@@ -100,11 +100,13 @@
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
+ <optional>true</optional>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext.cdi</groupId>
<artifactId>jersey-cdi1x</artifactId>
<version>${project.version}</version>
+ <optional>true</optional>
</dependency>
diff --git a/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java
index a5b5d06..4369f2a 100644
--- a/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java
+++ b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java
@@ -17,6 +17,8 @@
package org.glassfish.jersey.server.validation.internal;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.List;
import java.util.WeakHashMap;
@@ -257,9 +259,17 @@
private ValidatorContext getDefaultValidatorContext(final ValidateOnExecutionHandler handler) {
final ValidatorContext context = factory.usingContext();
- // Composite Configuration - due to PAYARA-2491
- // https://github.com/payara/Payara/issues/2245
- context.constraintValidatorFactory(resourceContext.getResource(CompositeInjectingConstraintValidatorFactory.class));
+ // if CDI is available use composite factiry
+ if (AccessController.doPrivileged(
+ ReflectionHelper.classForNamePA("javax.enterprise.inject.spi.BeanManager")) != null) {
+ // Composite Configuration - due to PAYARA-2491
+ // https://github.com/payara/Payara/issues/2245
+ context.constraintValidatorFactory(resourceContext.getResource(
+ CompositeInjectingConstraintValidatorFactory.class));
+ } else {
+ // Default Configuration.
+ context.constraintValidatorFactory(resourceContext.getResource(InjectingConstraintValidatorFactory.class));
+ }
// Traversable Resolver.
context.traversableResolver(getTraversableResolver(factory.getTraversableResolver(), handler));