Inheritance problem
pio1k Jul 21, 2009 3:07 AMHello.
I have a problem with class inheritance in web services. I want to make a web service with one method to add objects of classes (B, C and other in the future) which inheritated from my basic class (A). My source code:
Server side:
1) TestService.java
@WebService(serviceName = "TestService") @Stateless @XmlSeeAlso({B.class, C.class}) public class TestService { @EJB TestMgmtLocal tl = null; @WebMethod(operationName = "testAddA") public @WebResult(name = "A") A testAddA(@WebParam(name = "testA") A testA) { return tl.testAddA(testA); } }
2) TestMgmtLocal.java
@Local public interface TestMgmtLocal extends TestMgmtRemote { }
3) TestMgmtRemote.java
@Remote public interface TestMgmtRemote { A testAddA(A testA); }
4) TestMgmt.java
@Stateless public class TestMgmt implements TestMgmtLocal { @Resource private SessionContext ctx = null; public A testAddA(A testA) { if (testA instanceof A) { System.out.println("class A"); } if (testA instanceof B) { System.out.println("class B"); } if (testA instanceof C) { System.out.println("class C"); } return testA; } }
5) A.java
public class A implements Serializable { private static final long serialVersionUID = 110181269433550832L; private int a = -1; public int getA() { return a; } public void setA(int a) { this.a = a; } }
6) B.java
public class B extends A implements Serializable { private static final long serialVersionUID = 6921792702940813727L; private int b = -1; public int getB() { return b; } public void setB(int b) { this.b = b; } }
7) C.java
public class C extends A implements Serializable { private static final long serialVersionUID = 7823155353151239133L; private int c = -1; public int getC() { return c; } public void setC(int c) { this.c = c; } }
Client side:
1) TestClient.java
public class TestClient { public static void main(String[] args) { TestServiceProxy proxy = new TestServiceProxy(); TestService_PortType port = proxy.getTestService_PortType(); try { C c = new C(); c.setA(2); c.setC(3); port.testAddA(c); } catch(RemoteException e) { System.out.println(e); } } }
I found this page:
http://blog.vinodsingh.com/2008/09/anytype-object-over-webservice-and.html
but it doesn't work in my web service. In testAddA method I always get an object of A class (when I send from client object of B or C class). I've also tried to add @XmlSeeAlso annotation to A class but it doesn't help. Maybe I did something wrong? Any ideas? Any other solutions of this problem?
I'm using:
1) JBoss 4.2.3GA (I tired also on JBoss 5.1.GA)
2) Java 1.5 update 15