From: markt Date: Tue, 19 Oct 2010 13:03:01 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50105 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=ae6f5b4b9f9e9ecb72eb631d7001b2f4f71df62d;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50105 Use Enum.name() rather than Enum.toString() in composite expressions git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1024224 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/el/parser/AstCompositeExpression.java b/java/org/apache/el/parser/AstCompositeExpression.java index 223e01c32..4bbb9b025 100644 --- a/java/org/apache/el/parser/AstCompositeExpression.java +++ b/java/org/apache/el/parser/AstCompositeExpression.java @@ -20,6 +20,7 @@ package org.apache.el.parser; import javax.el.ELException; +import org.apache.el.lang.ELSupport; import org.apache.el.lang.EvaluationContext; @@ -48,7 +49,7 @@ public final class AstCompositeExpression extends SimpleNode { for (int i = 0; i < this.children.length; i++) { obj = this.children[i].getValue(ctx); if (obj != null) { - sb.append(obj); + sb.append(ELSupport.coerceToString(obj)); } } } diff --git a/test/org/apache/el/TestValueExpressionImpl.java b/test/org/apache/el/TestValueExpressionImpl.java index 0079f2c83..b2decc103 100644 --- a/test/org/apache/el/TestValueExpressionImpl.java +++ b/test/org/apache/el/TestValueExpressionImpl.java @@ -81,4 +81,27 @@ public class TestValueExpressionImpl extends TestCase { assertEquals(beanB, vr.getBase()); assertEquals("name", vr.getProperty()); } + + + public void testBug50105() { + ExpressionFactory factory = ExpressionFactory.newInstance(); + ELContext context = new ELContextImpl(); + + TesterEnum testEnum = TesterEnum.APPLE; + + ValueExpression var = + factory.createValueExpression(testEnum, TesterEnum.class); + context.getVariableMapper().setVariable("testEnum", var); + + // When coercing an Enum to a String, name() should always be used. + ValueExpression ve1 = factory.createValueExpression( + context, "${testEnum}", String.class); + String result1 = (String) ve1.getValue(context); + assertEquals("APPLE", result1); + + ValueExpression ve2 = factory.createValueExpression( + context, "foo${testEnum}bar", String.class); + String result2 = (String) ve2.getValue(context); + assertEquals("fooAPPLEbar", result2); + } } diff --git a/test/org/apache/el/TesterEnum.java b/test/org/apache/el/TesterEnum.java new file mode 100644 index 000000000..8dbb8c223 --- /dev/null +++ b/test/org/apache/el/TesterEnum.java @@ -0,0 +1,10 @@ +package org.apache.el; + +public enum TesterEnum { + APPLE, ORANGE; + + @Override + public String toString() { + return "This is a " + this.name(); + } +} diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 80dd6da19..0cb57efab 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -37,6 +37,13 @@
+ + + 50105: When processing composite EL expressions use + Enum.name() rather than Enum.toString() as + required by the EL specification. (markt) + +