Hi, Prateek

Below is complete WSDL.


<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:ns1="http://org.apache.axis2/xsd"; xmlns:ns="http://mypackage"; 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"; 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; 
xmlns:ax21="http://mypackage/xsd"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
targetNamespace="http://mypackage";>
    <wsdl:documentation>TestService</wsdl:documentation>
    <wsdl:types>
        <xs:schema xmlns:ax22="http://mypackage/xsd"; 
attributeFormDefault="qualified" elementFormDefault="qualified" 
targetNamespace="http://mypackage";>
            <xs:import namespace="http://mypackage/xsd"/>
            <xs:element name="objectSubClassAccessor">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="obj" nillable="true" 
type="ax22:ObjectSubClass"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="isSubClassObject">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="obj" nillable="true" 
type="ax22:ObjectSuperClass"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="isSubClassObjectResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="return" 
type="xs:boolean"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
        <xs:schema attributeFormDefault="qualified" 
elementFormDefault="qualified" targetNamespace="http://mypackage/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>
    </wsdl:types>
    <wsdl:message name="objectSubClassAccessorRequest">
        <wsdl:part name="parameters" element="ns:objectSubClassAccessor"/>
    </wsdl:message>
    <wsdl:message name="isSubClassObjectRequest">
        <wsdl:part name="parameters" element="ns:isSubClassObject"/>
    </wsdl:message>
    <wsdl:message name="isSubClassObjectResponse">
        <wsdl:part name="parameters" element="ns:isSubClassObjectResponse"/>
    </wsdl:message>
    <wsdl:portType name="TestServicePortType">
        <wsdl:operation name="objectSubClassAccessor">
            <wsdl:input message="ns:objectSubClassAccessorRequest" 
wsaw:Action="urn:objectSubClassAccessor"/>
        </wsdl:operation>
        <wsdl:operation name="isSubClassObject">
            <wsdl:input message="ns:isSubClassObjectRequest" 
wsaw:Action="urn:isSubClassObject"/>
            <wsdl:output message="ns:isSubClassObjectResponse" 
wsaw:Action="urn:isSubClassObjectResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="TestServiceSoap11Binding" type="ns:TestServicePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"; 
style="document"/>
        <wsdl:operation name="objectSubClassAccessor">
            <soap:operation soapAction="urn:objectSubClassAccessor" 
style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
        </wsdl:operation>
        <wsdl:operation name="isSubClassObject">
            <soap:operation soapAction="urn:isSubClassObject" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="TestServiceSoap12Binding" type="ns:TestServicePortType">
        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"; 
style="document"/>
        <wsdl:operation name="objectSubClassAccessor">
            <soap12:operation soapAction="urn:objectSubClassAccessor" 
style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
        </wsdl:operation>
        <wsdl:operation name="isSubClassObject">
            <soap12:operation soapAction="urn:isSubClassObject" 
style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="TestServiceHttpBinding" type="ns:TestServicePortType">
        <http:binding verb="POST"/>
        <wsdl:operation name="objectSubClassAccessor">
            <http:operation location="TestService/objectSubClassAccessor"/>
            <wsdl:input>
                <mime:content type="text/xml" part="objectSubClassAccessor"/>
            </wsdl:input>
        </wsdl:operation>
        <wsdl:operation name="isSubClassObject">
            <http:operation location="TestService/isSubClassObject"/>
            <wsdl:input>
                <mime:content type="text/xml" part="isSubClassObject"/>
            </wsdl:input>
            <wsdl:output>
                <mime:content type="text/xml" part="isSubClassObject"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="TestService">
        <wsdl:port name="TestServiceHttpSoap11Endpoint" 
binding="ns:TestServiceSoap11Binding">
            <soap:address 
location="http://localhost:8081/Axis2Bug/services/TestService.TestServiceHttpSoap11Endpoint/"/>
        </wsdl:port>
        <wsdl:port name="TestServiceHttpSoap12Endpoint" 
binding="ns:TestServiceSoap12Binding">
            <soap12:address 
location="http://localhost:8081/Axis2Bug/services/TestService.TestServiceHttpSoap12Endpoint/"/>
        </wsdl:port>
        <wsdl:port name="TestServiceHttpEndpoint" 
binding="ns:TestServiceHttpBinding">
            <http:address 
location="http://localhost:8081/Axis2Bug/services/TestService.TestServiceHttpEndpoint/"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

-----Original Message-----
From: Prateek Asthana [mailto:[email protected]]
Sent: 12. november 2010 12:54
To: [email protected]
Subject: Re: [AXIS2]. axis2. xsi:type object mapping does not work

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]


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

Reply via email to