You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by jb...@apache.org on 2015/01/11 22:36:58 UTC
svn commit: r1650974 - in
/tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard:
lang/jstl/Evaluator.java lang/support/ExpressionEvaluator.java
lang/support/ExpressionEvaluatorManager.java tlv/el/ValidationUtil.java
Author: jboynes
Date: Sun Jan 11 21:36:58 2015
New Revision: 1650974
URL: http://svn.apache.org/r1650974
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57433
Use a ConcurrentMap for the cache. However, as our code always uses the same implementation,
use a single instance of that and deprecate public access to the cache. Also includes some Java5 TLC.
Modified:
tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/jstl/Evaluator.java
tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluator.java
tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluatorManager.java
tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/tlv/el/ValidationUtil.java
Modified: tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/jstl/Evaluator.java
URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/jstl/Evaluator.java?rev=1650974&r1=1650973&r2=1650974&view=diff
==============================================================================
--- tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/jstl/Evaluator.java (original)
+++ tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/jstl/Evaluator.java Sun Jan 11 21:36:58 2015
@@ -76,11 +76,9 @@ public class Evaluator
return
MessageFormat.format
(Constants.ATTRIBUTE_PARSE_EXCEPTION,
- new Object[]{
- "" + pAttributeName,
- "" + pAttributeValue,
- exc.getMessage()
- });
+ "" + pAttributeName,
+ "" + pAttributeValue,
+ exc.getMessage());
}
}
@@ -109,12 +107,10 @@ public class Evaluator
throw new JspException
(MessageFormat.format
(Constants.ATTRIBUTE_EVALUATION_EXCEPTION,
- new Object[]{
- "" + pAttributeName,
- "" + pAttributeValue,
- exc.getMessage(),
- exc.getRootCause()
- }), exc.getRootCause());
+ "" + pAttributeName,
+ "" + pAttributeValue,
+ exc.getMessage(),
+ exc.getRootCause()), exc.getRootCause());
}
}
@@ -154,11 +150,9 @@ public class Evaluator
throw new JspException
(MessageFormat.format
(Constants.ATTRIBUTE_PARSE_EXCEPTION,
- new Object[]{
- "test",
- "" + pAttributeValue,
- exc.getMessage()
- }));
+ "test",
+ "" + pAttributeValue,
+ exc.getMessage()));
}
}
Modified: tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluator.java
URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluator.java?rev=1650974&r1=1650973&r2=1650974&view=diff
==============================================================================
--- tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluator.java (original)
+++ tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluator.java Sun Jan 11 21:36:58 2015
@@ -43,8 +43,7 @@ public interface ExpressionEvaluator {
/**
* Translation time validation of an expression.
- * This method will return a null String if the expression
- * is valid; otherwise an error message.
+ * This method will return a null String if the expression is valid; otherwise an error message.
*/
public String validate(String attributeName,
String expression);
Modified: tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluatorManager.java
URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluatorManager.java?rev=1650974&r1=1650973&r2=1650974&view=diff
==============================================================================
--- tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluatorManager.java (original)
+++ tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/lang/support/ExpressionEvaluatorManager.java Sun Jan 11 21:36:58 2015
@@ -17,7 +17,8 @@
package org.apache.taglibs.standard.lang.support;
-import java.util.HashMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
@@ -25,6 +26,7 @@ import javax.servlet.jsp.tagext.Tag;
import org.apache.taglibs.standard.lang.jstl.Coercions;
import org.apache.taglibs.standard.lang.jstl.ELException;
+import org.apache.taglibs.standard.lang.jstl.Evaluator;
import org.apache.taglibs.standard.lang.jstl.Logger;
/**
@@ -42,23 +44,22 @@ public class ExpressionEvaluatorManager
//*********************************************************************
// Constants
- public static final String EVALUATOR_CLASS =
- "org.apache.taglibs.standard.lang.jstl.Evaluator";
- // private static final String EVALUATOR_PARAMETER =
- // "javax.servlet.jsp.jstl.temp.ExpressionEvaluatorClass";
+ public static final String EVALUATOR_CLASS = "org.apache.taglibs.standard.lang.jstl.Evaluator";
//*********************************************************************
// Internal, static state
- private static HashMap nameMap = new HashMap();
- private static Logger logger = new Logger(System.out);
+ private static final ExpressionEvaluator EVALUATOR = new Evaluator();
+ private static final ConcurrentMap<String, ExpressionEvaluator> nameMap =
+ new ConcurrentHashMap<String, ExpressionEvaluator>();
+ static {
+ nameMap.put(EVALUATOR_CLASS, EVALUATOR);
+ }
- //*********************************************************************
- // Public static methods
+ private static final Logger logger = new Logger(System.out);
/**
- * Invokes the evaluate() method on the "active" ExpressionEvaluator
- * for the given pageContext.
+ * Invokes the evaluate() method on the "active" ExpressionEvaluator for the given pageContext.
*/
public static Object evaluate(String attributeName,
String expression,
@@ -67,17 +68,12 @@ public class ExpressionEvaluatorManager
PageContext pageContext)
throws JspException {
- // the evaluator we'll use
- ExpressionEvaluator target = getEvaluatorByName(EVALUATOR_CLASS);
-
// delegate the call
- return (target.evaluate(
- attributeName, expression, expectedType, tag, pageContext));
+ return (EVALUATOR.evaluate(attributeName, expression, expectedType, tag, pageContext));
}
/**
- * Invokes the evaluate() method on the "active" ExpressionEvaluator
- * for the given pageContext.
+ * Invokes the evaluate() method on the "active" ExpressionEvaluator for the given pageContext.
*/
public static Object evaluate(String attributeName,
String expression,
@@ -85,58 +81,38 @@ public class ExpressionEvaluatorManager
PageContext pageContext)
throws JspException {
- // the evaluator we'll use
- ExpressionEvaluator target = getEvaluatorByName(EVALUATOR_CLASS);
-
- // delegate the call
- return (target.evaluate(
- attributeName, expression, expectedType, null, pageContext));
+ return evaluate(attributeName, expression, expectedType, null, pageContext);
}
/**
* Gets an ExpressionEvaluator from the cache, or seeds the cache
* if we haven't seen a particular ExpressionEvaluator before.
*/
- public static ExpressionEvaluator getEvaluatorByName(String name)
- throws JspException {
-
- Object oEvaluator = nameMap.get(name);
- if (oEvaluator != null) {
- return ((ExpressionEvaluator) oEvaluator);
- }
+ @Deprecated
+ public static ExpressionEvaluator getEvaluatorByName(String name) throws JspException {
try {
- synchronized (nameMap) {
- oEvaluator = nameMap.get(name);
- if (oEvaluator != null) {
- return ((ExpressionEvaluator) oEvaluator);
- }
- ExpressionEvaluator e = (ExpressionEvaluator)
- Class.forName(name).newInstance();
- nameMap.put(name, e);
- return (e);
+ ExpressionEvaluator evaluator = nameMap.get(name);
+ if (evaluator == null) {
+ nameMap.putIfAbsent(name, (ExpressionEvaluator) Class.forName(name).newInstance());
+ evaluator = nameMap.get(name);
}
+ return evaluator;
} catch (ClassCastException ex) {
// just to display a better error message
- throw new JspException("invalid ExpressionEvaluator: " +
- ex.toString(), ex);
+ throw new JspException("invalid ExpressionEvaluator: " + name, ex);
} catch (ClassNotFoundException ex) {
- throw new JspException("couldn't find ExpressionEvaluator: " +
- ex.toString(), ex);
+ throw new JspException("couldn't find ExpressionEvaluator: " + name, ex);
} catch (IllegalAccessException ex) {
- throw new JspException("couldn't access ExpressionEvaluator: " +
- ex.toString(), ex);
+ throw new JspException("couldn't access ExpressionEvaluator: " + name, ex);
} catch (InstantiationException ex) {
- throw new JspException(
- "couldn't instantiate ExpressionEvaluator: " +
- ex.toString(), ex);
+ throw new JspException("couldn't instantiate ExpressionEvaluator: " + name, ex);
}
}
/**
* Performs a type conversion according to the EL's rules.
*/
- public static Object coerce(Object value, Class classe)
- throws JspException {
+ public static Object coerce(Object value, Class classe) throws JspException {
try {
// just delegate the call
return Coercions.coerce(value, classe, logger);
@@ -145,4 +121,13 @@ public class ExpressionEvaluatorManager
}
}
+ /**
+ * Validates an expression.
+ * @param attributeName the name of the attribute containing the expression
+ * @param expression the expression to validate
+ * @return null an error message or null of the expression is valid
+ */
+ public static String validate(String attributeName, String expression) {
+ return EVALUATOR.validate(attributeName, expression);
+ }
}
Modified: tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/tlv/el/ValidationUtil.java
URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/tlv/el/ValidationUtil.java?rev=1650974&r1=1650973&r2=1650974&view=diff
==============================================================================
--- tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/tlv/el/ValidationUtil.java (original)
+++ tomcat/taglibs/standard/trunk/jstlel/src/main/java/org/apache/taglibs/standard/tlv/el/ValidationUtil.java Sun Jan 11 21:36:58 2015
@@ -16,34 +16,17 @@
*/
package org.apache.taglibs.standard.tlv.el;
-import javax.servlet.jsp.JspException;
-
-import org.apache.taglibs.standard.lang.support.ExpressionEvaluator;
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
/**
*/
public class ValidationUtil {
- static String validateExpression(
- String elem, String att, String expr) {
-
- // let's just use the cache kept by the ExpressionEvaluatorManager
- ExpressionEvaluator current;
- try {
- current =
- ExpressionEvaluatorManager.getEvaluatorByName(
- ExpressionEvaluatorManager.EVALUATOR_CLASS);
- } catch (JspException ex) {
- // (using JspException here feels ugly, but it's what EEM uses)
- return ex.getMessage();
- }
+ static String validateExpression(String elem, String att, String expr) {
- String response = current.validate(att, expr);
- if (response == null) {
- return response;
- } else {
- return "tag = '" + elem + "' / attribute = '" + att + "': "
- + response;
+ String response = ExpressionEvaluatorManager.validate(att, expr);
+ if (response != null) {
+ response = "tag = '" + elem + "' / attribute = '" + att + "': " + response;
}
+ return response;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org