Validimir
take this example
/*contents of base class Works*/
package test;
public class Works
{
public int intValue=0;
public int getInt() { return this.intValue; }
}
/*contents of base class subWorks */
package test;
public class subWorks extends Works
{
public int intValue=1;
@Override
public int getInt() { return this.intValue; }
}
/*driver */
package test;
import test.Works;
import test.subWorks;
public class fubar
{
//now a test driver to determine what happens when a subclass is upcasted
public static void main(String [] args)
{
test.Works w =new test.Works();
test.subWorks s =new test.subWorks();
System.out.println("The original base class Works produces"+w.getInt());
System.out.println("The subclass subWorks produces "+s.getInt());
//now some upcasting
Works upcast=(subWorks)s;
System.out.println("The upcasted subclass produces"+upcast.getInt());
} //end main
} //end fubar class
classes>java -classpath .;%CLASSPATH% test.fubar
The original base class Works produces0
The subclass subWorks produces 1
The upcasted subclass produces1
/* the subclass when upcasted does NOT take on the characteristics of the
parent base class */
Martin Gainty
______________________________________________
Jogi és Bizalmassági kinyilatkoztatás/Verzicht und
Vertraulichkeitanmerkung/Note de déni et de confidentialité
Ez az üzenet bizalmas. Ha nem ön az akinek szánva volt, akkor kérjük, hogy
jelentse azt nekünk vissza. Semmiféle továbbítása vagy másolatának készítése
nem megengedett. Ez az üzenet csak ismeret cserét szolgál és semmiféle jogi
alkalmazhatósága sincs. Mivel az electronikus üzenetek könnyen
megváltoztathatóak, ezért minket semmi felelöség nem terhelhet ezen üzenet
tartalma miatt.
Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger
sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung
oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem
Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung.
Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung
fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le
destinataire prévu, nous te demandons avec bonté que pour satisfaire informez
l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est
interdite. Ce message sert à l'information seulement et n'aura pas n'importe
quel effet légalement obligatoire. Étant donné que les email peuvent facilement
être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité
pour le contenu fourni.
From: [email protected]
To: [email protected]
Date: Thu, 11 Nov 2010 15:55:40 +0100
Subject: RE: [AXIS2]. axis2. xsi:type object mapping does not work
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]> 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]
mobile - 071 56 91 321