Author: violetagg Date: Wed Jul 10 20:29:56 2013 New Revision: 1501971 URL: http://svn.apache.org/r1501971 Log: Merged revision 1501910 from tomcat/trunk: javax.el.ArrayELResolver: According to javadoc: 1. getFeatureDescriptors - always returns null 2. isReadOnly - when property cannot be coerced into an integer it is ignored by the resolver. 3. getType - when property cannot be coerced into an integer it is ignored by the resolver. Unit tests are added
Added: tomcat/tc7.0.x/trunk/test/javax/el/TestArrayELResolver.java - copied, changed from r1501910, tomcat/trunk/test/javax/el/TestArrayELResolver.java Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/javax/el/ArrayELResolver.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1501910 Modified: tomcat/tc7.0.x/trunk/java/javax/el/ArrayELResolver.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/javax/el/ArrayELResolver.java?rev=1501971&r1=1501970&r2=1501971&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/javax/el/ArrayELResolver.java (original) +++ tomcat/tc7.0.x/trunk/java/javax/el/ArrayELResolver.java Wed Jul 10 20:29:56 2013 @@ -19,7 +19,6 @@ package javax.el; import java.beans.FeatureDescriptor; import java.lang.reflect.Array; -import java.util.Arrays; import java.util.Iterator; public class ArrayELResolver extends ELResolver { @@ -62,8 +61,12 @@ public class ArrayELResolver extends ELR if (base != null && base.getClass().isArray()) { context.setPropertyResolved(true); - int idx = coerce(property); - checkBounds(base, idx); + try { + int idx = coerce(property); + checkBounds(base, idx); + } catch (IllegalArgumentException e) { + // ignore + } return base.getClass().getComponentType(); } @@ -111,8 +114,12 @@ public class ArrayELResolver extends ELR if (base != null && base.getClass().isArray()) { context.setPropertyResolved(true); - int idx = coerce(property); - checkBounds(base, idx); + try { + int idx = coerce(property); + checkBounds(base, idx); + } catch (IllegalArgumentException e) { + // ignore + } } return this.readOnly; @@ -120,20 +127,6 @@ public class ArrayELResolver extends ELR @Override public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) { - if (base != null && base.getClass().isArray()) { - FeatureDescriptor[] descs = new FeatureDescriptor[Array.getLength(base)]; - for (int i = 0; i < descs.length; i++) { - descs[i] = new FeatureDescriptor(); - descs[i].setDisplayName("["+i+"]"); - descs[i].setExpert(false); - descs[i].setHidden(false); - descs[i].setName(""+i); - descs[i].setPreferred(true); - descs[i].setValue(RESOLVABLE_AT_DESIGN_TIME, Boolean.FALSE); - descs[i].setValue(TYPE, Integer.class); - } - return Arrays.asList(descs).iterator(); - } return null; } Copied: tomcat/tc7.0.x/trunk/test/javax/el/TestArrayELResolver.java (from r1501910, tomcat/trunk/test/javax/el/TestArrayELResolver.java) URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/javax/el/TestArrayELResolver.java?p2=tomcat/tc7.0.x/trunk/test/javax/el/TestArrayELResolver.java&p1=tomcat/trunk/test/javax/el/TestArrayELResolver.java&r1=1501910&r2=1501971&rev=1501971&view=diff ============================================================================== --- tomcat/trunk/test/javax/el/TestArrayELResolver.java (original) +++ tomcat/tc7.0.x/trunk/test/javax/el/TestArrayELResolver.java Wed Jul 10 20:29:56 2013 @@ -19,6 +19,8 @@ package javax.el; import org.junit.Assert; import org.junit.Test; +import org.apache.jasper.el.ELContextImpl; + public class TestArrayELResolver { /** @@ -45,8 +47,7 @@ public class TestArrayELResolver { @Test public void testGetType03() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; Class<?> result = resolver.getType(context, base, new Integer(0)); @@ -61,8 +62,7 @@ public class TestArrayELResolver { @Test(expected = PropertyNotFoundException.class) public void testGetType04() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; resolver.getType(context, base, new Integer(1)); @@ -74,8 +74,7 @@ public class TestArrayELResolver { @Test public void testGetType05() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; Class<?> result = resolver.getType(context, base, "index"); @@ -108,8 +107,7 @@ public class TestArrayELResolver { @Test public void testGetValue03() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; Object result = resolver.getValue(context, base, new Integer(0)); @@ -124,8 +122,7 @@ public class TestArrayELResolver { @Test(expected = IllegalArgumentException.class) public void testGetValue04() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; resolver.getValue(context, base, "key"); @@ -137,8 +134,7 @@ public class TestArrayELResolver { @Test public void testGetValue05() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; Object result = resolver.getValue(context, base, new Integer(1)); @@ -176,8 +172,7 @@ public class TestArrayELResolver { @Test(expected = PropertyNotWritableException.class) public void testSetValue03() { ArrayELResolver resolver = new ArrayELResolver(true); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); resolver.setValue(context, new String[] {}, new Object(), new Object()); } @@ -188,8 +183,7 @@ public class TestArrayELResolver { @Test public void testSetValue04() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; resolver.setValue(context, base, new Integer(0), "new-element"); @@ -211,8 +205,7 @@ public class TestArrayELResolver { @Test(expected = IllegalArgumentException.class) public void testSetValue05() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; resolver.setValue(context, base, "key", "new-element"); @@ -224,8 +217,7 @@ public class TestArrayELResolver { @Test(expected = PropertyNotFoundException.class) public void testSetValue06() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; resolver.setValue(context, base, new Integer(1), "new-element"); @@ -238,8 +230,7 @@ public class TestArrayELResolver { @Test(expected = ClassCastException.class) public void testSetValue07() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; resolver.setValue(context, base, new Integer(0), new Integer(1)); @@ -260,8 +251,7 @@ public class TestArrayELResolver { @Test public void testIsReadOnly02() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); boolean result = resolver.isReadOnly(context, new Object(), new Object()); @@ -284,8 +274,7 @@ public class TestArrayELResolver { @Test public void testIsReadOnly03() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; boolean result = resolver.isReadOnly(context, base, new Integer(0)); @@ -307,8 +296,7 @@ public class TestArrayELResolver { @Test(expected = PropertyNotFoundException.class) public void testIsReadOnly04() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; resolver.isReadOnly(context, base, new Integer(1)); @@ -320,8 +308,7 @@ public class TestArrayELResolver { @Test public void testIsReadOnly05() { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); String[] base = new String[] { "element" }; boolean result = resolver.isReadOnly(context, base, "key"); @@ -340,8 +327,7 @@ public class TestArrayELResolver { private void doNegativeTest(Object base, Object trigger, MethodUnderTest method, boolean checkResult) { ArrayELResolver resolver = new ArrayELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); Object result = null; switch (method) { Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1501971&r1=1501970&r2=1501971&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Jul 10 20:29:56 2013 @@ -119,6 +119,16 @@ will return a result when the property cannot be coerced into an integer. (violetagg) </fix> + <fix> + Ensure that + <code>javax.el.ArrayELResolver.getFeatureDescriptors(ELContext,Object)</code> + will always return null. + <code>javax.el.ArrayELResolver.isReadOnly(ELContext,Object,Object)</code> + and + <code>javax.el.ArrayELResolver.getType(ELContext,Object,Object)</code> + will return a result when the property cannot be coerced into an + integer. (violetagg) + </fix> </changelog> </subsection> <subsection name="Cluster"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org