Author: jcompagner
Date: Fri Jul 3 12:01:23 2009
New Revision: 790879
URL: http://svn.apache.org/viewvc?rev=790879&view=rev
Log:
IndexOutOfBoundsException when PropertyResolver is using an invalid list index
PropertyModel does not support index only property ("[0]")
Issue: WICKET-2337,2354
Modified:
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
Modified:
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java?rev=790879&r1=790878&r2=790879&view=diff
==============================================================================
---
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
(original)
+++
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
Fri Jul 3 12:01:23 2009
@@ -218,6 +218,12 @@
while (index != -1)
{
exp = expressionBracketsSeperated.substring(lastIndex,
index);
+ if (exp.length() == 0)
+ {
+ exp =
expressionBracketsSeperated.substring(index + 1);
+ break;
+ }
+
IGetAndSet getAndSetter = null;
try
{
@@ -759,6 +765,8 @@
*/
public Object getValue(Object object)
{
+ if (((List)object).size() <= index)
+ return null;
return ((List)object).get(index);
}
@@ -815,7 +823,11 @@
*/
public Object getValue(Object object)
{
- return Array.get(object, index);
+ if (Array.getLength(object) > index)
+ {
+ return Array.get(object, index);
+ }
+ return null;
}
/**
Modified:
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
URL:
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java?rev=790879&r1=790878&r2=790879&view=diff
==============================================================================
---
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
(original)
+++
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
Fri Jul 3 12:01:23 2009
@@ -288,6 +288,42 @@
/**
* @throws Exception
*/
+ public void testGetPropertyByNotExistingIndexArrayLookup() throws
Exception
+ {
+ PropertyResolver.setValue("addressArray", person, new Address[]
{ }, CONVERTER);
+ String street =
(String)PropertyResolver.getValue("addressArray.0.street", person);
+ assertNull(street);
+ street =
(String)PropertyResolver.getValue("addressArray[0].street", person);
+ assertNull(street);
+ }
+
+ /**
+ * @throws Exception
+ */
+ public void testGetPropertyByNotExistingIndexListLookup() throws
Exception
+ {
+ PropertyResolver.setValue("addressList", person, new
ArrayList(), CONVERTER);
+ String street =
(String)PropertyResolver.getValue("addressList.0.street", person);
+ assertNull(street);
+ street =
(String)PropertyResolver.getValue("addressList[0].street", person);
+ assertNull(street);
+ }
+
+ /**
+ * @throws Exception
+ */
+ public void testGetIndexPropertyDirectly() throws Exception
+ {
+ Address address = new Address();
+ Address[] addresses = new Address[] { address };
+
+ Address address2 = (Address)PropertyResolver.getValue("[0]",
addresses);
+ assertSame(address, address2);
+ }
+
+ /**
+ * @throws Exception
+ */
public void testListSizeLookup() throws Exception
{
List/* <Address> */addresses = new ArrayList/* <Address> */();
@@ -300,6 +336,7 @@
assertEquals(size, new Integer(2));
}
+
/**
* @throws Exception
*/