Author: violetagg Date: Wed Jul 10 20:04:29 2013 New Revision: 1501948 URL: http://svn.apache.org/r1501948 Log: Merged revision 1501823 from tomcat/trunk: javax.el.ListELResolver: According to javadoc: 1. getFeatureDescriptors - always returns null 2. isReadOnly - 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/TestListELResolver.java - copied, changed from r1501823, tomcat/trunk/test/javax/el/TestListELResolver.java Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/javax/el/ListELResolver.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1501823 Modified: tomcat/tc7.0.x/trunk/java/javax/el/ListELResolver.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/javax/el/ListELResolver.java?rev=1501948&r1=1501947&r2=1501948&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/javax/el/ListELResolver.java (original) +++ tomcat/tc7.0.x/trunk/java/javax/el/ListELResolver.java Wed Jul 10 20:04:29 2013 @@ -19,7 +19,6 @@ package javax.el; import java.beans.FeatureDescriptor; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -121,10 +120,15 @@ public class ListELResolver extends ELRe if (base instanceof List<?>) { context.setPropertyResolved(true); List<?> list = (List<?>) base; - int idx = coerce(property); - if (idx < 0 || idx >= list.size()) { - throw new PropertyNotFoundException( - new ArrayIndexOutOfBoundsException(idx).getMessage()); + try { + int idx = coerce(property); + if (idx < 0 || idx >= list.size()) { + throw new PropertyNotFoundException( + new ArrayIndexOutOfBoundsException(idx) + .getMessage()); + } + } catch (IllegalArgumentException e) { + // ignore } return this.readOnly || UNMODIFIABLE.equals(list.getClass()); } @@ -134,20 +138,6 @@ public class ListELResolver extends ELRe @Override public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) { - if (base instanceof List<?>) { - FeatureDescriptor[] descs = new FeatureDescriptor[((List<?>) base).size()]; - 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/TestListELResolver.java (from r1501823, tomcat/trunk/test/javax/el/TestListELResolver.java) URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/javax/el/TestListELResolver.java?p2=tomcat/tc7.0.x/trunk/test/javax/el/TestListELResolver.java&p1=tomcat/trunk/test/javax/el/TestListELResolver.java&r1=1501823&r2=1501948&rev=1501948&view=diff ============================================================================== --- tomcat/trunk/test/javax/el/TestListELResolver.java (original) +++ tomcat/tc7.0.x/trunk/test/javax/el/TestListELResolver.java Wed Jul 10 20:04:29 2013 @@ -23,6 +23,8 @@ import java.util.List; import org.junit.Assert; import org.junit.Test; +import org.apache.jasper.el.ELContextImpl; + public class TestListELResolver { /** @@ -49,10 +51,9 @@ public class TestListELResolver { @Test public void testGetValue03() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); Object result = resolver.getValue(context, list, new Integer(0)); @@ -66,10 +67,9 @@ public class TestListELResolver { @Test(expected = IllegalArgumentException.class) public void testGetValue04() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); resolver.getValue(context, list, "key"); } @@ -80,10 +80,9 @@ public class TestListELResolver { @Test public void testGetValue05() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); Object result = resolver.getValue(context, list, new Integer(1)); @@ -120,10 +119,9 @@ public class TestListELResolver { @Test public void testGetType03() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); Class<?> result = resolver.getType(context, list, new Integer(0)); @@ -137,10 +135,9 @@ public class TestListELResolver { @Test(expected = PropertyNotFoundException.class) public void testGetType04() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); resolver.getType(context, list, new Integer(1)); } @@ -169,10 +166,9 @@ public class TestListELResolver { @Test(expected = PropertyNotWritableException.class) public void testSetValue03() { ListELResolver resolver = new ListELResolver(true); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - resolver.setValue(context, new ArrayList<>(), new Object(), + resolver.setValue(context, new ArrayList<Object>(), new Object(), new Object()); } @@ -182,10 +178,9 @@ public class TestListELResolver { @Test public void testSetValue04() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("value"); resolver.setValue(context, list, new Integer(0), "value"); @@ -200,10 +195,10 @@ public class TestListELResolver { @Test(expected = PropertyNotWritableException.class) public void testSetValue05() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<Object> list = Collections.unmodifiableList(new ArrayList<>()); + List<Object> list = Collections + .unmodifiableList(new ArrayList<Object>()); resolver.setValue(context, list, new Integer(0), "value"); } @@ -213,10 +208,9 @@ public class TestListELResolver { @Test(expected = IllegalArgumentException.class) public void testSetValue06() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); resolver.setValue(context, list, "key", "value"); } @@ -227,10 +221,9 @@ public class TestListELResolver { @Test(expected = PropertyNotFoundException.class) public void testSetValue07() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); resolver.setValue(context, list, new Integer(1), "value"); } @@ -250,8 +243,7 @@ public class TestListELResolver { @Test public void testIsReadOnly02() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); boolean result = resolver.isReadOnly(context, new Object(), new Object()); @@ -274,10 +266,9 @@ public class TestListELResolver { @Test public void testIsReadOnly03() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); boolean result = resolver.isReadOnly(context, list, new Integer(0)); @@ -298,10 +289,9 @@ public class TestListELResolver { @Test public void testIsReadOnly04() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); List<String> unmodifiableList = Collections.unmodifiableList(list); boolean result = resolver.isReadOnly(context, unmodifiableList, @@ -317,10 +307,9 @@ public class TestListELResolver { @Test(expected = PropertyNotFoundException.class) public void testIsReadOnly05() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); resolver.isReadOnly(context, list, new Integer(1)); } @@ -331,10 +320,9 @@ public class TestListELResolver { @Test public void testIsReadOnly06() { ListELResolver resolver = new ListELResolver(); - ELContext context = new StandardELContext( - ELManager.getExpressionFactory()); + ELContext context = new ELContextImpl(); - List<String> list = new ArrayList<>(); + List<String> list = new ArrayList<String>(); list.add("key"); boolean result = resolver.isReadOnly(context, list, "key"); @@ -352,8 +340,7 @@ public class TestListELResolver { private void doNegativeTest(Object base, Object trigger, MethodUnderTest method, boolean checkResult) { ListELResolver resolver = new ListELResolver(); - 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=1501948&r1=1501947&r2=1501948&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:04:29 2013 @@ -107,10 +107,18 @@ (violetagg) </fix> <fix> - <bug>55207</bug>: Enfore the restriction that a <jsp:text> element + <bug>55207</bug>: Enforce the restriction that a <jsp:text> element may not contain any sub-elements from any namespace. Patch provided by Jeremy Boynes. (mark)) </fix> + <fix> + Ensure that + <code>javax.el.ListELResolver.getFeatureDescriptors(ELContext,Object)</code> + will always return null. + <code>javax.el.ListELResolver.isReadOnly(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