BVAL-170: improve speed of message interpolation when the pattern clearly cannot contain an EL expression; thanks to Thomas Andraschko
diff --git a/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java b/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java
index 3248f8a..40797de 100644
--- a/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java
+++ b/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java
@@ -61,25 +61,26 @@
@Override
public String interpolate(final String message, final Map<String, Object> annotationParameters,
final Object validatedValue) {
- try {
- if (EvaluationType.IMMEDIATE.regex.matcher(message).find()) {
- final BValELContext context = new BValELContext();
- final VariableMapper variables = context.getVariableMapper();
- annotationParameters.forEach(
- (k, v) -> variables.setVariable(k, expressionFactory.createValueExpression(v, Object.class)));
-
- variables.setVariable("validatedValue",
- expressionFactory.createValueExpression(validatedValue, Object.class));
-
- // Java Bean Validation does not support EL expressions that look like JSP "deferred" expressions
- return expressionFactory.createValueExpression(context,
- EvaluationType.DEFERRED.regex.matcher(message).replaceAll("\\$0"), String.class).getValue(context)
- .toString();
+ if (message.contains("${") || message.contains("#{")) {
+ try {
+ if (EvaluationType.IMMEDIATE.regex.matcher(message).find()) {
+ final BValELContext context = new BValELContext();
+ final VariableMapper variables = context.getVariableMapper();
+ annotationParameters.forEach(
+ (k, v) -> variables.setVariable(k, expressionFactory.createValueExpression(v, Object.class)));
+
+ variables.setVariable("validatedValue",
+ expressionFactory.createValueExpression(validatedValue, Object.class));
+
+ // Java Bean Validation does not support EL expressions that look like JSP "deferred" expressions
+ return expressionFactory.createValueExpression(context,
+ EvaluationType.DEFERRED.regex.matcher(message).replaceAll("\\$0"), String.class).getValue(context)
+ .toString();
+ }
+ } catch (final Exception e) {
+ // no-op
}
- } catch (final Exception e) {
- // no-op
}
-
return message;
}