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