axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rafal Hudowski (JIRA)" <>
Subject [jira] [Commented] (AXIS2-3956) 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).
Date Tue, 26 Feb 2013 13:14:13 GMT


Rafal Hudowski commented on AXIS2-3956:


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:
>             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=""><soapenv:Body><ns2:echoAttrObjInfo
> <ns2:obj xmlns:s13="" xmlns:xsi=""
> <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
> <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv=""><soapenv:Body>
> <ns:echoAttrObjInfoResponse xmlns:ns="">
> <ns:return>
> <arrayAttributeForms xmlns="">
> <attributeFormID>XXXXXXXXXX</attributeFormID>
> <attributeFormName>XXXXXXXXXX</attributeFormName>
> <dataType>100</dataType>
> </arrayAttributeForms>
> <arrayAttributeForms xmlns="">
> <attributeFormID>YYYYYYYYYY</attributeFormID>
> <attributeFormName>YYYYYYYYYY</attributeFormName>
> <dataType>200</dataType>
> </arrayAttributeForms>
> <objCreationTime xmlns="">now</objCreationTime>
> <objDescription xmlns="">generic test object</objDescription>
> <objID xmlns="">DAVEKRAUS0002</objID>
> <objIsHidden xmlns="">false</objIsHidden>
> <objModificationTime xmlns="">later</objModificationTime>
> <objName xmlns="">MWSAttributeObjectInfo</objName>
> <objOwner xmlns="">Dave</objOwner>
> <objParentFolderID xmlns="">FOLDERID</objParentFolderID>
> <objPath xmlns="">objPath</objPath>
> <objState xmlns="">1</objState>
> <objType xmlns="">2</objType>
> <objVersion xmlns="">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:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message