Problem of polymorphism Web Service in EJB
ybxiang.china Nov 5, 2009 8:27 PMDear friends,
I can use pure polymorphism Web Service in Glassfish and JBoss correctly.
But, after annotated with @Stateless, my codes does NOT work.
Namely, i can not make my code work in EJB3 environment.
My environment:
JDK, lates.
jboss-5.1.0.GA-jdk6
Windows XP.
My java files:
package com.ybxiang.ejbws; import javax.xml.bind.annotation.XmlSeeAlso; @XmlSeeAlso({Human.class}) public class Animal implements java.io.Serializable{ private String name; private Long age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getAge() { return age; } public void setAge(Long age) { this.age = age; } public String toString(){ return "Animal-->name:"+this.getName()+",age:"+this.getAge(); } } package com.ybxiang.ejbws; public class Human extends Animal implements java.io.Serializable{ private String email; public void setEmail(String email) { this.email = email; } public String getEmail() { return email; } public String toString(){ return "Human-->name:"+this.getName()+",age:"+this.getAge()+","+"email:"+email; } } package com.ybxiang.ejbws; import java.util.ArrayList; import java.util.Iterator; import javax.jws.WebMethod; public interface EJBWebServiceInterface { public void passParameter1(String s); public void passParameter2(Animal a); public void passParameter3(Human h); public void passParameter4(ArrayList<Animal> lst); public ArrayList<? extends Animal> returnSomething1(int type); } package com.ybxiang.ejbws; import java.util.ArrayList; import java.util.Iterator; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.bind.annotation.XmlSeeAlso; import javax.jws.soap.SOAPBinding; @Stateless @WebService //@**XmlSeeAlso({Animal.class, Human.class})// Here i tried too! public class EJBWebServiceBean implements EJBWebServiceInterface{ @WebMethod public void passParameter1(String s){ System.out.println("------------String is got:"+s); } @WebMethod public void passParameter2(Animal a){ System.out.println("------------Animal is got:"+a); if(a instanceof Human){ System.out.println("************* It's realy human!!! *************"); } } @WebMethod public void passParameter3(Human h){ System.out.println("------------Human is got, name:"+h.getName()+", email:"+h.getEmail()); } @WebMethod public void passParameter4(ArrayList<Animal> lst){ System.out.println("------------ArrayList<Animal> is got:"); if(lst!=null){ Iterator<Animal> it = lst.iterator(); Animal a = it.next(); if(a instanceof Human){ System.out.println("One human is got:"+((Human)a)); }else{ System.out.println("One Animal is got:"+a); } }else{ System.out.println("------------List is null."); } } @WebMethod public ArrayList<? extends Animal> returnSomething1(int type){ if(type==1){ ArrayList<Animal> aa = new ArrayList<Animal>(); { Animal animal1 = new Animal(); animal1.setName("Animal.1"); animal1.setAge(new Long(1)); aa.add(animal1); } { Animal animal2 = new Animal(); animal2.setName("Animal.2"); animal2.setAge(new Long(2)); aa.add(animal2); } return aa; }else{ ArrayList<Human> bb = new ArrayList<Human>(); { Human human1 = new Human(); human1.setName("Human.1"); human1.setAge(new Long(1)); bb.add(human1); } { Human human2 = new Human(); human2.setName("Human.2"); human2.setAge(new Long(2)); bb.add(human2); } return bb; } } }