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