Additional fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=51177
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 9 May 2011 18:44:11 +0000 (18:44 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 9 May 2011 18:44:11 +0000 (18:44 +0000)
ListElResolver should also return Object.class for getType()

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1101144 13f79535-47bb-0310-9956-ffa450edef68

java/javax/el/ListELResolver.java
test/org/apache/el/TestValueExpressionImpl.java

index 989fcb5..bc63932 100644 (file)
@@ -74,8 +74,7 @@ public class ListELResolver extends ELResolver {
                 throw new PropertyNotFoundException(
                         new ArrayIndexOutOfBoundsException(idx).getMessage());
             }
-            Object obj = list.get(idx);
-            return (obj != null) ? obj.getClass() : null;
+            return Object.class;
         }
 
         return null;
index 5aaca58..36a035d 100644 (file)
@@ -17,7 +17,9 @@
 
 package org.apache.el;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.el.ELContext;
@@ -133,4 +135,31 @@ public class TestValueExpressionImpl extends TestCase {
         ve2.setValue(context, o1);
         assertEquals(o1, ve2.getValue(context));
     }
+    
+    public void testBug51177ObjectList() {
+        ExpressionFactory factory = ExpressionFactory.newInstance();
+        ELContext context = new ELContextImpl();
+        
+        Object o1 = "String value";
+        Object o2 = new Integer(32);
+
+        List<Object> list = new ArrayList<Object>();
+        list.add(0, o1);
+        list.add(1, o2);
+        
+        ValueExpression var =
+            factory.createValueExpression(list, List.class);
+        context.getVariableMapper().setVariable("list", var);
+
+        ValueExpression ve1 = factory.createValueExpression(
+                context, "${list[0]}", Object.class);
+        ve1.setValue(context, o2);
+        assertEquals(o2, ve1.getValue(context));
+        
+        ValueExpression ve2 = factory.createValueExpression(
+                context, "${list[1]}", Object.class);
+        ve2.setValue(context, o1);
+        assertEquals(o1, ve2.getValue(context));
+    }
+
 }