Hi,

Yes you are right superclass could not be cast to subclass, but in my example I 
am passing Subclass to the method which takes Superclass as an argument, which 
is fine.

From: Supun Malinga [mailto:[email protected]]
Sent: 11. november 2010 14:58
To: [email protected]
Subject: Re: [AXIS2]. axis2. xsi:type object mapping does not work


On Thu, Nov 11, 2010 at 5:30 PM, Vladimir Duloglo 
<[email protected]<mailto:[email protected]>> wrote:
I am experiencing some problems converting XML requests on the server side, in 
case XML requests contain xsi:type parameter.

The setup is following

Two objects:

ObjectSubClass extends ObjectSuperClass

A webservice with a method: getObject(ObjectSuperClass obj)

In wsdl these objects defined in the following way:

<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://mypackage.com/xsd";>
<xs:complexType name="ObjectSuperClass">
<xs:sequence>
<xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ObjectSubClass">
<xs:complexContent>
<xs:extension base="ax21:ObjectSuperClass">
<xs:sequence>
<xs:element minOccurs="0" name="phone" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
>From the client I am calling this method by passing to it subclass - 
>ObjectSubClass which has one extrafield -- phone:

ObjectSubClass obj = new ObjectSubclass();
obj.setId("some id");
obj.setName("some name");
obj.setPhone("some phone");
getObject(obj);

In the request XML object is represented like that:

<obj xsi:type="q1:ObjectSubClass" xmlns:q1="http://mypackage.com/xsd";>
<id>1</id>
<name>test</name>
<q1:phone>123</q1:phone>
</obj>
But on the server side no matter if I am passing instance of ObjectSuperClass 
or instance of ObjectSubClass I am getting always instance of superclass 
ObjectSuperClass, even when xsi:type specifies that object is of subclass 
ObjectSubClasstype. As a result I am not getting values present on 
ObjectSubClass and getting only values defined in superclass ObjectSuperClass.
hi,
may be i'm wrong, i'm still a newbe here. :)

but, didn't the casting of the superclass object  to the subclass object work?

thanks,

Same structure worked fine in axis1 ans xsi:type was respected.

Maybe it is some configuration in axis2.

I would be really thankful for any help.





--
Supun Malinga,

Software Engineer,
WSO2 Inc.
http://wso2.com
http://wso2.org
email - [email protected]<mailto:[email protected]>
mobile - 071 56 91 321

Reply via email to