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