axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Detelin Yordanov (JIRA)" <>
Subject [jira] Updated: (AXIS2-3825) Object's property not being deserialized because of mismatch of schema property name and Java property name
Date Wed, 20 Aug 2008 14:42:44 GMT


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:
>             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,
> 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) { = id; }
>     public String getName() { return name; }
>     public void setName(String 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:
> <ns2:inPerson>
>                <ns1:iD xmlns:ns1="">1</ns1:iD>
>                <ns1:name xmlns:ns1="">Detelin</ns1:name>
> </ns2:inPerson>
> <ns:return xmlns:ax21="" type="">
>                <ax21:iD xmlns:xsi="" 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:
For additional commands, e-mail:

View raw message