Hi there I've developed services which make use of polymorphism for WSLD/SOAP services and this works fine.
Can you attach the generated WSDL? You should see that the parameter p is of the abstract schema type Person. The service consumer must create an object of type Person and pass it to the print operation. On the wire, the xsi:type attribute is added thus the service provider knows to instantiate an object of type Student (Person is abstract). Thanks ------ Oliver Wulff Blog: http://owulff.blogspot.com Solution Architect http://coders.talend.com Talend Application Integration Division http://www.talend.com ________________________________________ From: Diana ALLAM [[email protected]] Sent: 07 June 2012 10:59 To: Daniel Kulp Cc: [email protected] Subject: Re: How the inheritance in java is supported in SOAP and RESTful services by using cxf Hello, Using @XmlSeeAlso annotation works only for my Restful example but not for the SOAP one. Can I conclude that it is impossible to include Java inheritance in SOAP but it is possible for REST? Diana On 6 juin 2012, at 18:39, Daniel Kulp wrote: > > If you add an @XmlSeeAlso annotation that points to the Student class, then > JAXB (and thus CXF) can pick up the Student class and it will appear the > schema and would properly be transfered on the wire with the appropriate > xsi:type attribute. > > You can add it to the Person class (so the Person knows about it's > subclasses) or you can add it to the Service class > > @XmlSeeAlso({Student.class}) > public class Service { > public String print(Person p){ > return p.info(); > } > } > > And CXF will pick it up. > > Dan > > > > > On Tuesday, June 05, 2012 08:46:39 AM dallam wrote: >> Hello, >> >> I have the following simple java Class which I would like to publish as a >> web service: >> >> -------------------------------------------------------------------------- >> ------------ public class Service { >> >> public String print(Person p){ >> return p.info(); >> } >> >> } >> -------------------------------------------------------------------------- >> ------------ I have also two classes, "Person" and its subclass "Student" >> which define differently the "info()" method: >> -------------------------------------------------------------------------- >> ---------- public class Person { >> >> private String name; >> >> public Person() { >> this.name = "diana"; >> } >> >> public String info(){ >> return "this is a person, his name is " + this.name; >> } >> >> public String getName(){ >> return this.name; >> } >> >> public void setName(String name){ >> this.name = name; >> } >> } >> -------------------------------------------------------------------------- >> ---------- public class Student extends Person{ >> >> private String school; >> >> public Student() { >> super(); >> this.school="emn"; >> } >> >> public String info(){ >> return "this is a student, his name is " + this.getName() + " >> from > the >> school of " + this.school; >> } >> >> public String getSchool(){ >> return this.school; >> } >> >> public void setSchool(String school){ >> this.school = school; >> } >> >> } >> -------------------------------------------------------------------------- >> ------------------------------------------- >> >> The problem is by using jaxws, I didn't find the way to build a client >> which would like to call the print service with a student object. Only >> "person" objects are accepted. >> Is there a way to do that in cxf? >> >> The same is for JaxRS by using annotations. >> For example, if I have the following post method: >> --------------------------------------------------------- >> @POST >> @Path("/persons/") >> public Response addPerson(Person p) { ... } >> --------------------------------------------------------- >> and I annotated the person class with: >> @XmlRootElement(name = "Person") >> >> and the Student class which extends Person is annotated with: >> @XmlRootElement(name = "Student") >> >> >> I can't send to the post method an XML with a "Student" root element >> because only "Person" root element is accepted. >> >> Is there an inheritance annotation in cxf to solve this problem? if not, >> why this issue is not considered >> in the implementation of the cxf framework? >> >> >> Best regards, >> >> Diana >> >> >> >> -- >> View this message in context: >> http://cxf.547215.n5.nabble.com/How-the-inheritance-in-java-is-supported- >> in-SOAP-and-RESTful-services-by-using-cxf-tp5709127.html Sent from the >> cxf-user mailing list archive at Nabble.com. > -- > Daniel Kulp > [email protected] - http://dankulp.com/blog > Talend Community Coder - http://coders.talend.com >
