diff --git a/bean-validation/runtime/pom.xml b/bean-validation/runtime/pom.xml index b6fa3370c..43532e9dc 100644 --- a/bean-validation/runtime/pom.xml +++ b/bean-validation/runtime/pom.xml @@ -21,10 +21,6 @@ org.hibernate.validator hibernate-validator - - org.glassfish.web - el-impl - org.jboss.graalvm graal-annotations diff --git a/bean-validation/runtime/src/main/java/org/jboss/shamrock/beanvalidation/runtime/ValidatorProvider.java b/bean-validation/runtime/src/main/java/org/jboss/shamrock/beanvalidation/runtime/ValidatorProvider.java index a5cfc7b65..066445883 100644 --- a/bean-validation/runtime/src/main/java/org/jboss/shamrock/beanvalidation/runtime/ValidatorProvider.java +++ b/bean-validation/runtime/src/main/java/org/jboss/shamrock/beanvalidation/runtime/ValidatorProvider.java @@ -1,12 +1,17 @@ package org.jboss.shamrock.beanvalidation.runtime; +import java.lang.reflect.Method; + import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; +import javax.validation.Configuration; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; +import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; + @ApplicationScoped public class ValidatorProvider { @@ -14,7 +19,16 @@ public class ValidatorProvider { @PostConstruct public void setup() { - factory = Validation.buildDefaultValidatorFactory(); + Configuration configure = Validation.byDefaultProvider().configure(); + try { + Class cl = Class.forName("javax.el.ELManager"); + Method method = cl.getDeclaredMethod("getExpressionFactory"); + method.invoke(null); + } catch (Throwable t) { + //if EL is not on the class path we use the parameter message interpolator + configure.messageInterpolator(new ParameterMessageInterpolator()); + } + factory = configure.buildValidatorFactory(); } @Produces diff --git a/bean-validation/runtime/src/main/java/org/jboss/shamrock/beanvalidation/runtime/graal/ConfigurationImplSubstitution.java b/bean-validation/runtime/src/main/java/org/jboss/shamrock/beanvalidation/runtime/graal/ConfigurationImplSubstitution.java new file mode 100644 index 000000000..52b77c760 --- /dev/null +++ b/bean-validation/runtime/src/main/java/org/jboss/shamrock/beanvalidation/runtime/graal/ConfigurationImplSubstitution.java @@ -0,0 +1,50 @@ +package org.jboss.shamrock.beanvalidation.runtime.graal; + +import java.util.function.Predicate; + +import javax.validation.MessageInterpolator; + +import org.hibernate.validator.internal.engine.ConfigurationImpl; +import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; + +import com.oracle.svm.core.annotate.Alias; +import com.oracle.svm.core.annotate.Substitute; +import com.oracle.svm.core.annotate.TargetClass; +import com.oracle.svm.core.annotate.TargetElement; + +@TargetClass(ConfigurationImpl.class) +final class ConfigurationImplSubstitution { + + @Alias + private MessageInterpolator defaultMessageInterpolator; + + @Substitute + @TargetElement(onlyWith = ElPredicate.class) + public final MessageInterpolator getDefaultMessageInterpolator() { + if (defaultMessageInterpolator == null) { + defaultMessageInterpolator = new ParameterMessageInterpolator(); + } + + return defaultMessageInterpolator; + } + + @Substitute + @TargetElement(onlyWith = ElPredicate.class) + private MessageInterpolator getDefaultMessageInterpolatorConfiguredWithClassLoader() { + return new ParameterMessageInterpolator(); + } + + + static class ElPredicate implements Predicate> { + + @Override + public boolean test(Class o) { + try { + Class.forName("com.sun.el.ExpressionFactoryImpl"); + return false; + } catch (Throwable t) { + } + return true; + } + } +} diff --git a/pom.xml b/pom.xml index 1271a0c04..dd86c7d37 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,6 @@ 1.3.4 3.0.1.b08-redhat-1 6.0.7.Final - 2.2 @@ -373,17 +372,6 @@ fakereplace ${fakereplace.version} - - org.glassfish - javax.el-impl - ${javax.el-impl.version} - - - org.glassfish - javax.el-api - - - org.glassfish javax.json