axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nathan Wray (JIRA)" <>
Subject [jira] Created: (AXIS2-3010) BeanUtil Deserialize has exponential runtime error when deserializing arrays
Date Tue, 24 Jul 2007 19:58:31 GMT
BeanUtil Deserialize has exponential runtime error when deserializing arrays

                 Key: AXIS2-3010
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: adb
    Affects Versions: 1.1.1, 1.2
         Environment: Windows xp, tomcat, java 1.5, running POJO services via RPCServiceClient

            Reporter: Nathan Wray

When an OMElement is deserialized into a POJO and the POJO has a setter/getter pair with an
Array parameter, the result object is created and set into the POJO once for each member of
the array.  So for example an object with
 String [] getHeaders()
 void setHeaders(String[] h)

where h[] is an array with 80 elements, the array h will be created 80 times and setHeaders
will be called 80 times rather than once.  This causes incredibly poor performance.
It appears to be due to a pattern where each child in the element tree causes a jump back
up to the parent and a re-creation of that array result.  This is very easy to recreate by
instrumenting a set method that accepts an array.

I patched this locally in the 1_1_1 version of BeanUtil by changing line 283 from
                    PropertyDescriptor prty = (PropertyDescriptor) properties.get(partsLocalName);
                    PropertyDescriptor prty = (PropertyDescriptor) properties.remove(partsLocalName);

This removes the definition of the set method after it's called the first time, so the remainder
of the array elements don't cause the entire result to be recreated over and over.
I looked at the 1.2 code and this does not appear to be resolved.  The performance impact
in my case, with 4700 result objects in an array, with each result object having a further
array of 77 fields, was huge.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message