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 "Davanum Srinivas (JIRA)" <ji...@apache.org> on 2007/07/18 05:26:04 UTC
[jira] Updated: (AXIS2-2976) 1.3 RC1 BeanUtil changes cause
previously working client to break
[ https://issues.apache.org/jira/browse/AXIS2-2976?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Davanum Srinivas updated AXIS2-2976:
------------------------------------
Assignee: Deepal Jayasinghe
> 1.3 RC1 BeanUtil changes cause previously working client to break
> -----------------------------------------------------------------
>
> Key: AXIS2-2976
> URL: https://issues.apache.org/jira/browse/AXIS2-2976
> Project: Axis 2.0 (Axis2)
> Issue Type: Bug
> Components: databinding
> Affects Versions: 1.3
> Environment: Linux running Java 1.6, Axis 1.3 RC1
> Reporter: Sathija Pavuluri
> Assignee: Deepal Jayasinghe
>
> Certain changes that were made to BeanUtil in adb's databinding package cause my client to break due to 2 changes.
> The changes were made in revision 546616.
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java?r1=543752&r2=546616
> Issue 1:
> ------------------------------------------------------------------------------------------------------------
> What the change essentially did from my client's perspective is this:
> ClassA {
> int i = 0;
> ClassB b = null;
> }
> When the BeanUtil class serialized this object, the resulting ObjectA's state is like this:
> ObjectA { i=0; b = ObjectB} as opposed to b=null.
> I hope I made my point clear, when I supply it an object with a field whose value is null, the resulting object's field is no longer null, but an actual instance is created (always!).
> And here is the change that's doing this (from revision 546616 diff to its previous):
> @@ -363,15 +374,14 @@
> PropertyDescriptor proprty = propDescs[i];
> properties.put(proprty.getName(), proprty);
> }
> - boolean tuched = false;
> Iterator elements = beanElement.getChildren();
> + if (beanObj == null) {
> + beanObj = objectSupplier.getObject(beanClass);
> + }
> while (elements.hasNext()) {
> // the beanClass could be an abstract one.
> // so create an instance only if there are elements, in
> // which case a concrete subclass is available to instantiate.
> - if (beanObj == null) {
> - beanObj = objectSupplier.getObject(beanClass);
> - }
> OMElement parts;
> Object objValue = elements.next();
> if (objValue instanceof OMElement) {
> @@ -405,14 +415,9 @@
> if (writeMethod != null) {
> writeMethod.invoke(beanObj, parms);
> }
> - tuched = true;
> }
> }
> - if (tuched) {
> - return beanObj;
> - } else {
> - return null;
> - }
> + return beanObj;
> }
> See how the variable 'tuched' is no longer used and beanObj is always instantiated (even when there is no next element) outside the while loop.
> This creates objects whose inner references are never going to be null (when they really may be if the client never populated them).
> Was there any reason that change was made (there was no code comment to suggest that) ? If not, I think that code should be reverted back.
> Issue 2:
> --------------------------------------------------------------------------------------------------------
> From the same diff, notice this change:
> @@ -609,8 +614,12 @@
> helper, true, objectSupplier);
> valueList.add(o);
> }
> - retObjs[count] = ConverterUtil.convertToArray(arrayClassType,
> - valueList);
> + if(valueList.get(0)==null){
> + retObjs[count] = null;
> + } else {
> + retObjs[count] = ConverterUtil.convertToArray(arrayClassType,
> + valueList);
> + }
> Notice how the return array is always created irrespective of the valueList being empty.
> ConverterUtil.convertToArray creates an array object which is null when valueList is empty.
> When my client provides a null array I expect that it comes out of BeanUtil as null rather than as a non-null array object with an empty element.
> Again, if this was not done for any good reason, should probably be reverted back.
> Thanks,
> Sathija.
--
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