You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2005/09/20 16:05:38 UTC
svn commit: r290454 -
/webservices/axis/trunk/java/src/org/apache/axis/utils/BeanPropertyDescriptor.java
Author: dims
Date: Tue Sep 20 07:05:35 2005
New Revision: 290454
URL: http://svn.apache.org/viewcvs?rev=290454&view=rev
Log:
Fix for AXIS-2202 - Axis doesn't propertly support JavaBeans with array-type properties.
from Andrei Iltchenko
Modified:
webservices/axis/trunk/java/src/org/apache/axis/utils/BeanPropertyDescriptor.java
Modified: webservices/axis/trunk/java/src/org/apache/axis/utils/BeanPropertyDescriptor.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/src/org/apache/axis/utils/BeanPropertyDescriptor.java?rev=290454&r1=290453&r2=290454&view=diff
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/utils/BeanPropertyDescriptor.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/utils/BeanPropertyDescriptor.java Tue Sep 20 07:05:35 2005
@@ -179,8 +179,23 @@
new Object[] {
new Integer(i), newValue});
} else {
- growArrayToSize(obj, myPD.getPropertyType().getComponentType(), i);
- Array.set(get(obj), i, newValue);
+ // Not calling 'growArrayToSize' to avoid an extra call to the
+ // property's setter. The setter will be called at the end anyway.
+ // growArrayToSize(obj, myPD.getPropertyType().getComponentType(), i);
+ Object array = get(obj);
+ if (array == null || Array.getLength(array) <= i) {
+ Class componentType = getType().getComponentType();
+ Object newArray = Array.newInstance(componentType, i + 1);
+ // Copy over the old elements
+ if (array != null) {
+ System.arraycopy(array, 0, newArray, 0, Array.getLength(array));
+ }
+ array = newArray;
+ }
+ Array.set(array, i, newValue);
+ // Fix for non-indempondent array-type propertirs.
+ // Make sure we call the property's setter.
+ set(obj, array);
}
}