Andre Rothe created AXIS-2914:
---------------------------------
Summary: Wrong deserialization of arrays
Key: AXIS-2914
URL: https://issues.apache.org/jira/browse/AXIS-2914
Project: Axis
Issue Type: Bug
Components: Serialization/Deserialization
Affects Versions: 1.4
Environment: Java 1.8.0_66
Reporter: Andre Rothe
An external webservice returns a message
{code:xml}
<?xml version="1.0" encoding="UTF-8" standalone="no"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Header><ns1:wosid
xmlns:ns1="http://www.apple.com/webobjects/webservices/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
soapenv:mustUnderstand="0"
xsi:type="soapenc:string">KMN8CSp2A5BOd0OOOPizng</ns1:wosid><ns2:woinst
xmlns:ns2="http://www.apple.com/webobjects/webservices/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
soapenv:mustUnderstand="0"
xsi:type="soapenc:string">1</ns2:woinst></soapenv:Header><soapenv:Body><ns3:projectDataResponse
xmlns:ns3="http://ws.dc.xyz.de"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><projectDataReturn
xmlns:ns4="http://results.ws.appserver.xyz.de"
xsi:type="ns4:ProjectDataResult"><errorCode
xsi:type="xsd:int">0</errorCode><message
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xsi:nil="true"
xsi:type="soapenc:string"/><statusCode
xsi:type="xsd:int">1</statusCode><project
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="soapenc:string">ZKS</project><centres
xmlns:ns5="http://beans.eo.xyz.de" xsi:type="ns5:CentreBean"><name
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="soapenc:string">Center 1</name></centres><centres
xmlns:ns6="http://beans.eo.xyz.de" xsi:type="ns6:CentreBean"><name
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="soapenc:string">Center
2</name></centres></projectDataReturn></ns3:projectDataResponse></soapenv:Body></soapenv:Envelope>
{code}
But the Array contains only the last CentreBean object. I have seen in the
code, that the set() method of the BeanPropertyDescriptor overwrites the
previous CenterBean object in the target array. The object is casted to
CentreBean[] with one entry and it is stored on the same place as the first
CenterBean.
It seems, that it should be necessary to use an index property value greater
than 0 to access the right set() method (the one which can handle arrays), but
the index is always -1, and so it will use the simple one.
Within the DeserializerImpl.class I have a CentreBean.class as value object
within the valueComplete() method (which is called after the endElement event
during the XML parsing). The first call to the BeanPropertyDescriptor.set()
throws an exception because the object type must be an array. After
JavaUtils.convert() I have the right type, but the set() method doesn't
recognize, that there is a value already stored within the
BeanPropertyDescriptor. So the result will hold only the last one.
Is this a problem with the deserializer or is there a problem with the
Webservice description?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]