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 "Detelin Yordanov (JIRA)" <ji...@apache.org> on 2008/08/20 16:42:44 UTC

[jira] Updated: (AXIS2-3825) Object's property not being deserialized because of mismatch of schema property name and Java property name

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

Detelin Yordanov updated AXIS2-3825:
------------------------------------

    Attachment: BeanUtil_patch.txt

Hi guys, 
  I found a solution for the problem - since the bean property descriptor name is with uppercase first letter, while the 
schema has been generated with lowercase first letter name (see DefaultSchemaGenerator#getCorrectName(String)), if we cannot find the property descriptor using lowercase first letter element name, we should try with uppercase first letter element name.
I'm attaching the patch, hopefully Amila will be able to take a look at it and apply it.

And all this due to Annogen bug, I'm happy that Axis2 1.5 won't be using Annogen anymore.

> Object's property not being deserialized because of mismatch of schema property name and Java property name
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: AXIS2-3825
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3825
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>          Components: adb
>    Affects Versions: 1.4
>         Environment: Axis2 1.4 (revision 657751 from 1_4 branch)
>            Reporter: Detelin Yordanov
>         Attachments: BeanUtil_patch.txt, tcpmon.log, TypeTest.zip
>
>
> Hi guys,
>  I have the following problem - I have a simple bean with a property that starts with an uppercase letter (e.g. ID).
> public class Person {
>     protected Integer id;
>     protected String name;
>     
>     public Integer getID() {  return id; }
>     public void setID(Integer id) { this.id = id; }
>     public String getName() { return name; }
>     public void setName(String name) { this.name = name; }
> }
> When I generate the schema element for it (using Java2WSDL), it's being generated with lowercase - "iD":
> <xs:complexType name="Person">
>     <xs:sequence>
>         <xs:element minOccurs="0" name="iD" nillable="true" type="xs:int"/>
>         <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
>     </xs:sequence>
> </xs:complexType>
> That's not a problem by itself, the real problem, however, is that this property does not get deserialized corectly on the server
> side and the service receives a person object with null ID:
> REQUEST:
> <ns2:inPerson>
>                <ns1:iD xmlns:ns1="http://data.test.tempuri.org/xsd">1</ns1:iD>
>                <ns1:name xmlns:ns1="http://data.test.tempuri.org/xsd">Detelin</ns1:name>
> </ns2:inPerson>
> RESPONSE:
> <ns:return xmlns:ax21="http://data.test.tempuri.org/xsd" type="org.tempuri.test.data.Person">
>                <ax21:iD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
>                <ax21:name>Detelin</ax21:name>
> </ns:return>
> Notice that the returned "iD" property has not been initialized.
> I debugged the deserialization code on the server side and found out that the reason for this seems to be in the
> org.apache.axis2.databinding.utils.BeanUtil#deserialize(Class, OMElement,ObjectSupplier, String) method.
> The following code at line 429 of BeanUtil(revision 657751):
> PropertyDescriptor prty = (PropertyDescriptor)properties.remove(partsLocalName);
> is not finding the property descriptor since it searches using "iD" property name, while the property descriptor name
> has been resolved by the java.beans.Introspector to "ID".
> Since the property descriptor is not found, the Person instance does not get its property written and the service receives null,
> and hence the nil element in the response.
> Regards,
>    Detelin

-- 
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