You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2002/06/05 22:46:38 UTC
cvs commit: jakarta-commons/beanutils/src/test/org/apache/commons/beanutils BeanUtilsTestCase.java
rdonkin 2002/06/05 13:46:38
Modified: beanutils/src/java/org/apache/commons/beanutils
BeanUtils.java
beanutils/src/test/org/apache/commons/beanutils
BeanUtilsTestCase.java
Log:
Committed 'NoSuchMethod for read only properties and NullPointer when populating primitives' patch submitted by Tomas Viberg. this is one of those patches that i thought long and hard about committing. this isn't a part of beanutils that i'm particularly familiar with but no one spoke up on the list when i asked so i'm going to back my judgement. if i've got it wrong, i'm sure someone will be kind enough to commit a correction. this patch changes the behaviour of two problematic setProperty issues. when a setProperty was called on a read only method, the previous behaviour was to throw a InvocationTargetException. this patch now returns (after logging). when an primitive property was set with a null, a NullPointerException was throw. now, the null is converted.
Revision Changes Path
1.23 +25 -7 jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java
Index: BeanUtils.java
===================================================================
RCS file: /home/cvs/jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- BeanUtils.java 17 May 2002 07:25:50 -0000 1.22
+++ BeanUtils.java 5 Jun 2002 20:46:38 -0000 1.23
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java,v 1.22 2002/05/17 07:25:50 jstrachan Exp $
- * $Revision: 1.22 $
- * $Date: 2002/05/17 07:25:50 $
+ * $Header: /home/cvs/jakarta-commons/beanutils/src/java/org/apache/commons/beanutils/BeanUtils.java,v 1.23 2002/06/05 20:46:38 rdonkin Exp $
+ * $Revision: 1.23 $
+ * $Date: 2002/06/05 20:46:38 $
*
* ====================================================================
*
@@ -87,7 +87,7 @@
* @author Chris Audley
* @author Rey Fran�ois
* @author Gregor Ra�man
- * @version $Revision: 1.22 $ $Date: 2002/05/17 07:25:50 $
+ * @version $Revision: 1.23 $ $Date: 2002/06/05 20:46:38 $
*/
public class BeanUtils {
@@ -509,8 +509,14 @@
/**
- * Set the specified property value, performing type conversions as
- * required to conform to the type of the destination property.
+ * <p>Set the specified property value, performing type conversions as
+ * required to conform to the type of the destination property.</p>
+ *
+ * <p>If the property is read only then the method returns
+ * without throwing an exception.</p>
+ *
+ * <p>If <code>null</code> is passed into a property expecting a primitive value,
+ * then this will be converted as if it were a <code>null</code> string.</p>
*
* @param bean Bean on which setting is to be performed
* @param name Property name (can be nested/indexed/mapped/combo)
@@ -619,12 +625,24 @@
return; // Skip this property setter
}
if (descriptor instanceof MappedPropertyDescriptor) {
+ if (((MappedPropertyDescriptor) descriptor).getMappedWriteMethod() == null) {
+ log.debug("Skipping read-only property");
+ return; // Read-only, skip this property setter
+ }
type = ((MappedPropertyDescriptor) descriptor).
getMappedPropertyType();
} else if (descriptor instanceof IndexedPropertyDescriptor) {
+ if (((IndexedPropertyDescriptor) descriptor).getIndexedWriteMethod() == null) {
+ log.debug("Skipping read-only property");
+ return; // Read-only, skip this property setter
+ }
type = ((IndexedPropertyDescriptor) descriptor).
getIndexedPropertyType();
} else {
+ if (descriptor.getWriteMethod() == null) {
+ log.debug("Skipping read-only property");
+ return; // Read-only, skip this property setter
+ }
type = descriptor.getPropertyType();
}
}
@@ -652,7 +670,7 @@
newValue = value;
}
} else { // Value into scalar
- if (value instanceof String) {
+ if (value instanceof String || (value == null && type.isPrimitive())) {
newValue = ConvertUtils.convert((String) value, type);
} else if (value instanceof String[]) {
newValue = ConvertUtils.convert(((String[]) value)[0],
1.10 +11 -7 jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java
Index: BeanUtilsTestCase.java
===================================================================
RCS file: /home/cvs/jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- BeanUtilsTestCase.java 27 Apr 2002 23:11:23 -0000 1.9
+++ BeanUtilsTestCase.java 5 Jun 2002 20:46:38 -0000 1.10
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java,v 1.9 2002/04/27 23:11:23 craigmcc Exp $
- * $Revision: 1.9 $
- * $Date: 2002/04/27 23:11:23 $
+ * $Header: /home/cvs/jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/BeanUtilsTestCase.java,v 1.10 2002/06/05 20:46:38 rdonkin Exp $
+ * $Revision: 1.10 $
+ * $Date: 2002/06/05 20:46:38 $
*
* ====================================================================
*
@@ -95,7 +95,7 @@
* </ul>
*
* @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.10 $
*/
public class BeanUtilsTestCase extends TestCase {
@@ -472,10 +472,11 @@
map.put("doubleProperty", "432.0");
// floatProperty is left at 123.0
map.put("intProperty", "543");
- // longProperty is left at 321
+ map.put("longProperty", null);
map.put("shortProperty", "654");
// stringProperty is left at "This is a string"
map.put("writeOnlyProperty", "New writeOnlyProperty value");
+ map.put("readOnlyProperty", "New readOnlyProperty value");
BeanUtils.populate(bean, map);
@@ -489,8 +490,8 @@
(float) 0.005);
assertEquals("intProperty is 543",
543, bean.getIntProperty());
- assertEquals("longProperty is 321",
- (long) 321, bean.getLongProperty());
+ assertEquals("longProperty is 0",
+ (long) 0, bean.getLongProperty());
assertEquals("shortProperty is 654",
(short) 654, bean.getShortProperty());
assertEquals("stringProperty is \"This is a string\"",
@@ -498,6 +499,9 @@
assertEquals("writeOnlyProperty is \"New writeOnlyProperty value\"",
"New writeOnlyProperty value",
bean.getWriteOnlyPropertyValue());
+ assertEquals("readOnlyProperty is \"Read Only String Property\"",
+ "Read Only String Property",
+ bean.getReadOnlyProperty());
} catch (IllegalAccessException e) {
fail("IllegalAccessException");
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>