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));