Author: jcompagner
Date: Mon Jul 6 15:23:09 2009
New Revision: 791513
URL: http://svn.apache.org/viewvc?rev=791513&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/trunk/wicket/ (props changed)
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
Propchange: wicket/trunk/wicket/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jul 6 15:23:09 2009
@@ -1,3 +1,3 @@
-/wicket/branches/wicket-1.3.x/jdk-1.4/wicket:653208,653212,653215,653226,653231,654304,655446,655466,655786,658141,658189,659118,659120,662360,663058,671549,671885,687144-688996,698530-698577,701132-701133,701843,701850-701877,704231,708127,722099-722105,726536,728467-728490,731960,734478,739647,739951,745468-745497,749817,755171-755176,759905,760374,764756,769389,769440,774373,781715,781719
+/wicket/branches/wicket-1.3.x/jdk-1.4/wicket:653208,653212,653215,653226,653231,654304,655446,655466,655786,658141,658189,659118,659120,662360,663058,671549,671885,687144-688996,698530-698577,701132-701133,701843,701850-701877,704231,708127,722099-722105,726536,728467-728490,731960,734478,739647,739951,745468-745497,749817,755171-755176,759905,760374,764756,769389,769440,774373,781715,781719,790879
/wicket/sandbox/jthomerson/experimental/wicket-devutils/wicket:760296-760351,760353-760355
/wicket/trunk/wicket-devutils/wicket:760352
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java?rev=791513&r1=791512&r2=791513&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
Mon Jul 6 15:23:09 2009
@@ -217,6 +217,12 @@
while (index != -1)
{
exp = expressionBracketsSeperated.substring(lastIndex,
index);
+ if (exp.length() == 0)
+ {
+ exp =
expressionBracketsSeperated.substring(index + 1);
+ break;
+ }
+
IGetAndSet getAndSetter = null;
try
{
@@ -762,6 +768,8 @@
*/
public Object getValue(Object object)
{
+ if (((List<?>)object).size() <= index)
+ return null;
return ((List<?>)object).get(index);
}
@@ -819,7 +827,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/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java?rev=791513&r1=791512&r2=791513&view=diff
==============================================================================
---
wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
(original)
+++
wicket/trunk/wicket/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
Mon Jul 6 15:23:09 2009
@@ -294,6 +294,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> */();
@@ -306,6 +342,7 @@
assertEquals(size, new Integer(2));
}
+
/**
* @throws Exception
*/