[
https://issues.apache.org/jira/browse/AXIS2-3825?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12627383#action_12627383
]
Amila Chinthaka Suriarachchi commented on AXIS2-3825:
-----------------------------------------------------
I went through the schema generating logic and parsing logic and found they use
different approaches. This is the cause of this problem.
Lets take this POJO.
public class Person {
private String x;
public int getY() {
return 0;
}
public void setY(int y) {
}
}
The schema generator use the fields to generate the schema and hence it shows x
in the xsd. But parsing logic uses the PropertyDescriptors and it search for a
y.
I think we need to use the same logic using Property descriptors at the schema
generator logic as well. I'll have a more look on to it.
> 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
> Assignee: Amila Chinthaka Suriarachchi
> 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]