[prev in list] [next in list] [prev in thread] [next in thread] 

List:       axis-user-ja
Subject:    [jira] [Commented] (AXIS-2914) Wrong deserialization of arrays
From:       "Andre Rothe (JIRA)" <axis-dev () ws ! apache ! org>
Date:       2016-07-05 6:52:11
Message-ID: JIRA.12970752.1463576924000.23614.1467701531434 () Atlassian ! JIRA
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/AXIS-2914?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15362110#comment-15362110 \
] 

Andre Rothe commented on AXIS-2914:
-----------------------------------

It seems to work with this XML if you use public member variables within the bean \
classes. If you use a public member array, then it works, if you change the \
visibility and use getter /setter methods for the array, the XML is wrong to fill the \
values into the CentreBean[]. My current workaround uses SOAP handler on client side, \
which adds the array description into an additional tag of type ArrayOfCentreBean \
into the webservice response just before Axis processes the XML.

> 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: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic