You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2009/08/04 02:23:42 UTC
svn commit: r800638 - in /commons/proper/beanutils/trunk/src:
java/org/apache/commons/beanutils/LazyDynaList.java
test/org/apache/commons/beanutils/LazyDynaListTestCase.java
Author: niallp
Date: Tue Aug 4 00:23:41 2009
New Revision: 800638
URL: http://svn.apache.org/viewvc?rev=800638&view=rev
Log:
BEANUTILS-300 Fix NullPointerExceptions in LazyDynaList
Modified:
commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/LazyDynaList.java
commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/LazyDynaListTestCase.java
Modified: commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/LazyDynaList.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/LazyDynaList.java?rev=800638&r1=800637&r2=800638&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/LazyDynaList.java (original)
+++ commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/LazyDynaList.java Tue Aug 4 00:23:41 2009
@@ -503,7 +503,8 @@
throw new IllegalArgumentException("Element Type is missing");
}
- if (size() > 0) {
+ boolean changeType = (this.elementType != null && !this.elementType.equals(elementType));
+ if (changeType && size() > 0) {
throw new IllegalStateException("Element Type cannot be reset");
}
@@ -634,18 +635,17 @@
}
// Get DynaClass (restore WrapDynaClass lost in serialization)
- DynaClass dynaClass = (elementDynaClass == null) ? wrapDynaClass : elementDynaClass;
- if (dynaClass == null) {
+ if (getDynaClass() == null) {
setElementType(elementType);
}
// Create a new DynaBean
try {
- dynaBean = dynaClass.newInstance();
+ dynaBean = getDynaClass().newInstance();
newDynaBeanType = dynaBean.getClass();
} catch (Exception e) {
throw new IllegalArgumentException("Error creating DynaBean: "
- + dynaClass.getClass().getName()
+ + getDynaClass().getClass().getName()
+ " - " + e);
}
@@ -675,7 +675,7 @@
// Check the new element type, matches all the
// other elements in the List
- if (newElementType != elementType) {
+ if (elementType != null && !newElementType.equals(elementType)) {
throw new IllegalArgumentException("Element Type " + newElementType
+ " doesn't match other elements " + elementType);
}
@@ -683,5 +683,11 @@
return dynaBean;
}
-
+
+ /**
+ * Return the DynaClass.
+ */
+ private DynaClass getDynaClass() {
+ return (elementDynaClass == null ? wrapDynaClass : elementDynaClass);
+ }
}
Modified: commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/LazyDynaListTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/LazyDynaListTestCase.java?rev=800638&r1=800637&r2=800638&view=diff
==============================================================================
--- commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/LazyDynaListTestCase.java (original)
+++ commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/LazyDynaListTestCase.java Tue Aug 4 00:23:41 2009
@@ -219,6 +219,13 @@
}
+ /**
+ * Test adding a map to List with no type set.
+ */
+ public void testNullType() {
+ LazyDynaList lazyList = new LazyDynaList();
+ lazyList.add(new HashMap());
+ }
/**
* Test DynaBean Create
@@ -519,6 +526,9 @@
target = null;
bean = null;
+ // Test BEANUTILS-300
+ result.add(null);
+
// Confirm property value
bean = (WrapDynaBean)result.get(0);
assertEquals("post-serialize check", "value1", bean.get("stringProperty"));