Vladimir,
Can you post the complete WSDL here?

Prateek


On Thu, Nov 11, 2010 at 1:29 PM, Vladimir Duloglo <[email protected]> wrote:
> Hi,  Martin
>
> You example makes perfect sense, but the problem which I am experiencing
> with axis2 is different.
>
> I am going to slightly modify  your example to explain. What I did is I have
> added a new field to the subWorks class named title.
>
> I have created a method  called printWorksInfo which takes superclass(Works)
> as an input parameter. In the main class I am instantiating an instance of
> subWorks and passing it to that method.
>
> In plain java not considering axis2 “else if (works instance of subWorks) “
> condition would be true and I would be able to printout title.
>
>
>
> What would happen if class fubar would’ve been exposed as webservice using
> axis2, with printWorksInfo method,  is that by passing to that method
> subclass subWorks would result on the server side in instance of
> Superclass(Works) and that is my problem.
>
> XML which is send from client to the server would’ve clearly  identify that
> input parameter to the printWorksInfo method passed from the client  is of
> subWorks type, and it would’ve contain xml tag for title, but on the server
> side inside printWorksInfo it
>
> will be converted to Superclass(Works) and title value will be lost as it
> does not exists on superclass. See my original post I have described this
> situation with XML examples. In axis1 it works fine and in case subclass is
> passed to the method it is correctly desirealized from XML to java object of
> subclass instance. So the problem might be with the way axis2 deserialises
> XML.
>
>
>
> /*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;
>
>    public String title = “title”;
>
>    @Override
>    public int getInt() { return this.intValue; }
>
>    public String getTitle() {return this.title}
>
> }
>
> /*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.subWorks s  =new test.subWorks();
>   printWorkInfo(s);
>    } //end main
>
>  public void printWorksInfo(Works works) {
>
>   if (works instanceof Works) {
>
>       system.out.println(“superclass”);
>
>   } else if (works instance of subWorks) {
>
>       system.out.println(“subclass”);
>
>         Works s = (subWorks) works;
>
>         System.out.println(“Works title: ” s.getTitle());
>
>
>
>    } // end If
>
> } // end printWorksInfo
> } //end fubar class
>
>
>
>
> From: Martin Gainty [mailto:[email protected]]
> Sent: 11. november 2010 16:41
>
> To: [email protected]
> Subject: RE: [AXIS2]. axis2. xsi:type object mapping does not work
>
>
>
> 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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to