From 7fdc74c1c49b389f912ce522b8150477bf2ccb28 Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 9 May 2011 16:31:03 +0000 Subject: [PATCH] Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51177 MapElResolver should always return Object.class for getType() git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1101094 13f79535-47bb-0310-9956-ffa450edef68 --- java/javax/el/MapELResolver.java | 3 +-- test/org/apache/el/TestValueExpressionImpl.java | 29 +++++++++++++++++++++++++ webapps/docs/changelog.xml | 11 +++++++++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/java/javax/el/MapELResolver.java b/java/javax/el/MapELResolver.java index e7aa462d9..118301e66 100644 --- a/java/javax/el/MapELResolver.java +++ b/java/javax/el/MapELResolver.java @@ -64,8 +64,7 @@ public class MapELResolver extends ELResolver { if (base instanceof Map) { context.setPropertyResolved(true); - Object obj = ((Map) base).get(property); - return (obj != null) ? obj.getClass() : null; + return Object.class; } return null; diff --git a/test/org/apache/el/TestValueExpressionImpl.java b/test/org/apache/el/TestValueExpressionImpl.java index b2decc103..5aaca5881 100644 --- a/test/org/apache/el/TestValueExpressionImpl.java +++ b/test/org/apache/el/TestValueExpressionImpl.java @@ -17,6 +17,9 @@ package org.apache.el; +import java.util.HashMap; +import java.util.Map; + import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.el.ValueExpression; @@ -104,4 +107,30 @@ public class TestValueExpressionImpl extends TestCase { String result2 = (String) ve2.getValue(context); assertEquals("fooAPPLEbar", result2); } + + public void testBug51177ObjectMap() { + ExpressionFactory factory = ExpressionFactory.newInstance(); + ELContext context = new ELContextImpl(); + + Object o1 = "String value"; + Object o2 = new Integer(32); + + Map map = new HashMap(); + map.put("key1", o1); + map.put("key2", o2); + + ValueExpression var = + factory.createValueExpression(map, Map.class); + context.getVariableMapper().setVariable("map", var); + + ValueExpression ve1 = factory.createValueExpression( + context, "${map.key1}", Object.class); + ve1.setValue(context, o2); + assertEquals(o2, ve1.getValue(context)); + + ValueExpression ve2 = factory.createValueExpression( + context, "${map.key2}", Object.class); + ve2.setValue(context, o1); + assertEquals(o1, ve2.getValue(context)); + } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 48f3abf7b..a18dd66de 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -75,7 +75,16 @@ Ensure session cookie paths end in / so that session cookies created for a context with a path of /foo do not get returned with requests mapped to a context with a path of - /foobar. (markt) + /foobar. (markt) + + + + + + + 51177: Ensure Tomcat's MapElResolver always returns + Object.class for getType() as required by the + EL specification. (markt) -- 2.11.0