From 6f0da1dfbd1a36f7c02725141cad2f2da3dee9fe Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Mon, 21 Nov 2016 15:25:03 +0100 Subject: [PATCH] HV-1155 Initialize the ExpressionFactory properly in the ELContext --- .../engine/messageinterpolation/ElTermResolver.java | 2 +- .../messageinterpolation/el/SimpleELContext.java | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/ElTermResolver.java b/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/ElTermResolver.java index 3a99de311f..d1a23d78ec 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/ElTermResolver.java +++ b/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/ElTermResolver.java @@ -59,7 +59,7 @@ public ElTermResolver(Locale locale, ExpressionFactory expressionFactory) { @Override public String interpolate(MessageInterpolator.Context context, String expression) { String resolvedExpression = expression; - SimpleELContext elContext = new SimpleELContext(); + SimpleELContext elContext = new SimpleELContext( expressionFactory ); try { ValueExpression valueExpression = bindContextValues( expression, context, elContext ); resolvedExpression = (String) valueExpression.getValue( elContext ); diff --git a/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/el/SimpleELContext.java b/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/el/SimpleELContext.java index 321729442b..c739819d2d 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/el/SimpleELContext.java +++ b/engine/src/main/java/org/hibernate/validator/internal/engine/messageinterpolation/el/SimpleELContext.java @@ -7,11 +7,13 @@ package org.hibernate.validator.internal.engine.messageinterpolation.el; import java.lang.reflect.Method; + import javax.el.ArrayELResolver; import javax.el.BeanELResolver; import javax.el.CompositeELResolver; import javax.el.ELContext; import javax.el.ELResolver; +import javax.el.ExpressionFactory; import javax.el.ListELResolver; import javax.el.MapELResolver; import javax.el.ResourceBundleELResolver; @@ -37,7 +39,14 @@ public class SimpleELContext extends ELContext { private final VariableMapper variableMapper; private final ELResolver resolver; - public SimpleELContext() { + public SimpleELContext(ExpressionFactory expressionFactory) { + // In javax.el.ELContext, the ExpressionFactory is extracted from the context map. If it is not found, it + // defaults to ELUtil.getExpressionFactory() which, if we provided the ExpressionFactory to the + // ResourceBundleMessageInterpolator, might not be the same, thus potentially instantiating another + // ExpressionFactory outside of the boundaries of the class loader safe loading mechanism of + // ResourceBundleMessageInterpolator. + putContext( ExpressionFactory.class, expressionFactory ); + functions = new MapBasedFunctionMapper(); variableMapper = new MapBasedVariableMapper(); resolver = DEFAULT_RESOLVER;