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]

Reply via email to