You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Deepal Jayasinghe (JIRA)" <ji...@apache.org> on 2007/07/25 12:50:31 UTC

[jira] Resolved: (AXIS2-3010) BeanUtil Deserialize has exponential runtime error when deserializing arrays

     [ https://issues.apache.org/jira/browse/AXIS2-3010?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Deepal Jayasinghe resolved AXIS2-3010.
--------------------------------------

    Resolution: Fixed

fixed in current SVN

> BeanUtil Deserialize has exponential runtime error when deserializing arrays
> ----------------------------------------------------------------------------
>
>                 Key: AXIS2-3010
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3010
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>          Components: adb
>    Affects Versions: 1.2, 1.1.1
>         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);
> to
>                     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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org