[
https://issues.apache.org/jira/browse/AXIS2-3956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13587101#comment-13587101
]
Rafal Hudowski commented on AXIS2-3956:
---------------------------------------
Hi,
We have noticed above behaviour during our stub invokation. We had to resign
from an inheritance. It was a big problem because we just invoke WS and we had
to ask the vendor to make such changes (remove inheritance) inside their code.
Is it possible to solve this issue?
> Polymorphic object returned from POJO service method is serialized in reverse
> order than what is expected by client generated with wsdl2java (when subclass
> contains an array).
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: AXIS2-3956
> URL: https://issues.apache.org/jira/browse/AXIS2-3956
> Project: Axis2
> Issue Type: Bug
> Components: codegen
> Affects Versions: 1.2, 1.4
> Environment: Windows XP, Tomcat 5.0.28, Axis2 1.4, also Axis2 1.2.
> Reporter: David R. Kraus
>
> Serialization code provided on the server side by Axis2, based on my POJO and
> its supporting parameter/return objects, serializes a returned polymorphic
> object with subclass fields first, followed by superclass fields, when the
> subclass contains an array.
> The client code generated from the WSDL of this POJO based service (using
> wsdl2java-ADB), serializes the polymorphic object in the reverse order with
> superclass fields preceding subclass fields; and also expects that
> polymorphic objects received from the server follow this same order. Since
> the server serializes in the reverse order "unexpected subelement" errors
> occur.
> My assertion is that client serialization code, which is generated from POJO
> WSDL using wsdl2java, should be consistent with POJO server serialization
> code.
> More info below:
> I deployed a simple web service as a POJO to both axis2 1.2 and axis2 1.4.
> This service basically echoes back an object which demonstrates inheritance.
> In this example, MWSAttributeObjectInfo is a subclass of MWSObjectInfo. To
> create the client I used wsdl2java (adb) against the deployed POJO service
> WSDL.
> When I invoked the echoAttrObjInfo method, which simply passes in
> MWSAttributeObjectInfo, and receives the same MWSAttributeObjectInfo back, I
> received an "Unexpected subelement arrayAttributeForms" in Axis2 1.2, and
> "Unexpected subelement objCreationTime" in Axis2 1.4.
> The client serialized the object to the server with MWSObjectInfo
> (superclass) fields first, followed by subclass fields (rest of
> MWSAttributeObjectInfo - the array). The server responded by passing back the
> object with the subclass fields first (the array), followed by superclass
> fields (MWSObjectInfo). This caused an exception in the client. Axis2 1.2
> detected that the array shouldn't come first. Axis2 1.4 didn't see the error
> until after the array was processed, getting an exception on the first field
> after the array(objCreationTime).
> I tried a subclass with simple fields (no array), and no error was generated.
>
> From the WSDL:
> superclass:
> <xs:element name="MWSObjectInfo" type="ax22:MWSObjectInfo" />
> <xs:complexType name="MWSObjectInfo">
> <xs:sequence>
> <xs:element name="objCreationTime" nillable="true" type="xs:string" />
> <xs:element name="objDescription" nillable="true" type="xs:string" />
> <xs:element name="objID" nillable="true" type="xs:string" />
> <xs:element name="objIsHidden" type="xs:boolean" />
> <xs:element name="objModificationTime" nillable="true" type="xs:string" />
> <xs:element name="objName" nillable="true" type="xs:string" />
> <xs:element name="objOwner" nillable="true" type="xs:string" />
> <xs:element name="objParentFolderID" nillable="true" type="xs:string" />
> <xs:element name="objPath" nillable="true" type="xs:string" />
> <xs:element name="objState" type="xs:int" />
> <xs:element name="objType" type="xs:int" />
> <xs:element name="objVersion" type="xs:int" />
> </xs:sequence>
> </xs:complexType>
> subclass:
> <xs:element name="MWSAttributeObjectInfo" type="ax22:MWSAttributeObjectInfo"
> />
> <xs:complexType name="MWSAttributeObjectInfo">
> <xs:complexContent>
> <xs:extension base="ax22:MWSObjectInfo">
> <xs:sequence>
> <xs:element maxOccurs="unbounded" name="arrayAttributeForms" nillable="true"
> type="ax22:MWSHierarchyAttributeFormInfo" />
> </xs:sequence>
> </xs:extension>
> </xs:complexContent>
> </xs:complexType>
> Soap Trace
> Client Request sends MWSAttributeObjectInfo(array in subclass serialized at
> the end)..
> <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns2:echoAttrObjInfo
> xmlns:ns2="http://microstrategy.com/webservices/">
> <ns2:obj xmlns:s13="http://wsftest.com/xsd"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:type="s13:MWSAttributeObjectInfo">
> <s13:objCreationTime>now</s13:objCreationTime>
> <s13:objDescription>generic test object</s13:objDescription>
> <s13:objID>DAVEKRAUS0002</s13:objID>
> <s13:objIsHidden>false</s13:objIsHidden>
> <s13:objModificationTime>later</s13:objModificationTime>
> <s13:objName>MWSAttributeObjectInfo</s13:objName>
> <s13:objOwner>Dave</s13:objOwner>
> <s13:objParentFolderID>FOLDERID</s13:objParentFolderID>
> <s13:objPath>objPath</s13:objPath>
> <s13:objState>1</s13:objState>
> <s13:objType>2</s13:objType>
> <s13:objVersion>1</s13:objVersion>
> <s13:arrayAttributeForms>
> <s13:attributeFormID>XXXXXXXXXX</s13:attributeFormID>
> <s13:attributeFormName>XXXXXXXXXX</s13:attributeFormName>
> <s13:dataType>100</s13:dataType>
> </s13:arrayAttributeForms>
> <s13:arrayAttributeForms>
> <s13:attributeFormID>YYYYYYYYYY</s13:attributeFormID>
> <s13:attributeFormName>YYYYYYYYYY</s13:attributeFormName>
> <s13:dataType>200</s13:dataType>
> </s13:arrayAttributeForms>
> </ns2:obj>
> </ns2:echoAttrObjInfo></soapenv:Body></soapenv:Envelope>
> Server Response echoes back same MWSAttributeObjectInfo object (array in
> subclass serialized first)
> <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
> <ns:echoAttrObjInfoResponse xmlns:ns="http://microstrategy.com/webservices/">
> <ns:return>
> <arrayAttributeForms xmlns="http://wsftest.com/xsd">
> <attributeFormID>XXXXXXXXXX</attributeFormID>
> <attributeFormName>XXXXXXXXXX</attributeFormName>
> <dataType>100</dataType>
> </arrayAttributeForms>
> <arrayAttributeForms xmlns="http://wsftest.com/xsd">
> <attributeFormID>YYYYYYYYYY</attributeFormID>
> <attributeFormName>YYYYYYYYYY</attributeFormName>
> <dataType>200</dataType>
> </arrayAttributeForms>
> <objCreationTime xmlns="http://wsftest.com/xsd">now</objCreationTime>
> <objDescription xmlns="http://wsftest.com/xsd">generic test
> object</objDescription>
> <objID xmlns="http://wsftest.com/xsd">DAVEKRAUS0002</objID>
> <objIsHidden xmlns="http://wsftest.com/xsd">false</objIsHidden>
> <objModificationTime
> xmlns="http://wsftest.com/xsd">later</objModificationTime>
> <objName xmlns="http://wsftest.com/xsd">MWSAttributeObjectInfo</objName>
> <objOwner xmlns="http://wsftest.com/xsd">Dave</objOwner>
> <objParentFolderID xmlns="http://wsftest.com/xsd">FOLDERID</objParentFolderID>
> <objPath xmlns="http://wsftest.com/xsd">objPath</objPath>
> <objState xmlns="http://wsftest.com/xsd">1</objState>
> <objType xmlns="http://wsftest.com/xsd">2</objType>
> <objVersion xmlns="http://wsftest.com/xsd">1</objVersion>
> </ns:return>
> </ns:echoAttrObjInfoResponse>
> </soapenv:Body></soapenv:Envelope>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]