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);
         }
     }