axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Zhou Jian Han" <z...@ariodata.com>
Subject RE: Does Axis support polymorphism (dynamic send back the derived class)
Date Thu, 21 Oct 2004 17:50:20 GMT
Thanks for the reply. 
Yes, I did include all the types in .wsdl, and I also see wsdl2java
generate all the java beans, such as Shape.java; Square.java (also
Square is extended from Shape), so all the generated code look fine.
The only problem is after the request come back from server, if I send a
'Square' object back, the BeanDeserializer still try to biuld 'Shape'
object, and does not recognize the additional field on the Square. 
Any idea? does this polymorphism work if you use Axis as both client and
server soap?

Here are the part of my wsdl:

  <complexType name="Shape">
     <sequence>
     <element name="name" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true"/>
     <element name="sides" type="xsd:int" minOccurs="1" maxOccurs="1"/>
     </sequence>
  </complexType>
  <complexType name="Square">
   <complexContent>
    <extension base="ns:Shape">
     <sequence>
     <element name="name" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true"/>
     <element name="sides" type="xsd:int" minOccurs="1" maxOccurs="1"
default="4"/>
     <element name="size" type="xsd:int" minOccurs="1" maxOccurs="1"/>
     </sequence>
    </extension>
   </complexContent>
  </complexType>


<message name="getPolyRequest">
 <part name="type" type="xsd:int"/>
</message>

<message name="polytestResponse">
 <part name="out" type="ns:Shape"/>
</message>

<portType name="polymorphPortType">
 <operation name="getPoly">
  <documentation>Service definition of function
ns__getPoly</documentation>
  <input message="tns:getPolyRequest"/>
  <output message="tns:polytestResponse"/>
 </operation>
</portType>


Thanks,
Georgia
-----Original Message-----
From: Christophe Roudet [mailto:croudet@activia.net]
Sent: Thursday, October 21, 2004 10:35 AM
To: axis-user@ws.apache.org
Subject: RE: Does Axis support polymorphism (dynamic send back the
derived class)


If you generate your client from a wsdl (with wsdl2java) make sure that
your
derived types are declared in.

   <complexType abstract="true" name="Shape">
    <sequence>
     <element name="size" type="xsd:int"/>
     ....
    </sequence>
   </complexType>

   <complexType name="Square">
    <complexContent>
     <extension base="tns1:Shape">
      <sequence>
        ....
      </sequence>
     </extension>
    </complexContent>
   </complexType>

Christophe

> -----Original Message-----
> From: Zhou Jian Han [mailto:zhan@ariodata.com]
> Sent: Thursday, October 21, 2004 1:02 PM
> To: axis-user@ws.apache.org
> Subject: Does Axis support polymorphism (dynamic send back the derived
> class)
> 
> Hi,
> I have a based class named Shape, and a derived class named Square(
Square
> extends Shape).
> Is that possible I declare a method in service:
> public Shape getShape(int type) throws RemoteException
> and send back the Square Object?
> 
> By the way, I use gSoap(c/c++ soap) on server side, and apache Axis on
> client side, it looks like server send out the Square object, but
client
> is not recognize the derived object, it is complain about "Invalid
element
> in Shape- Square.size" (and 'size' is the field in Square, not in
Shape).
> 
> Does any one have sample that polymorphism is working in Java Axis?
> 
> Thanks in Advance!
> Georgia



Mime
View raw message