Creo que esta pregunta se ha formulado como un millón de veces, pero ninguna de las soluciones sugeridas me ha funcionado. Aquí está mi ejemplo de implementaciónJAXB No se pueden manejar las interfaces
public class FooImpl2 implements Foo {
private int a = 100 ;
private String b = "I am FooImpl2";
private boolean c;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public boolean isC() {
return c;
}
public void setC(boolean c) {
this.c = c;
}
}
@XmlRootElement
@XmlSeeAlso({FooImpl1.class, FooImpl2.class})
public interface Foo {}
public class FooImpl1 implements Foo {
private int x;
private String y ="I am FooImpl1";
private boolean z;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
public boolean isZ() {
return z;
}
public void setZ(boolean z) {
this.z = z;
}
}
@XmlRootElement
public class Response{
private Foo foo;
@XmlElement(type=Object.class)
public Foo getFoo() {
return foo;
}
public void setFoo(Foo foo) {
this.foo = foo;
}
}
public class SimpleResource {
@Path("foo/{val}") @Produces({"application/json"}) @GET
public FooAdapter getFoo(@QueryParam("val") int val) {
FooAdapter ret = new FooAdapter();
if(val % 2 == 0) {
ret.setFoo(new FooImpl2());
} else {
ret.setFoo(new FooImpl1());
}
return ret;
}
Siempre me siguiente excepción
com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 cargos de IllegalAnnotationExceptions com.abc.objectsToReturn.Foo es una interfaz ,
puede cualquiera que me ayude a encontrar la solución correcta
¿Esto también falla si se trata de una clase abstracta? – Woot4Moo
@ La sugerencia de Woot4Moo es lo que he encontrado con JAXB: interface = does not work, abstract class = works – Ash