es probable que necesite usar @XmlSeeAlso
anotación en su primera clase:
@XmlSeeAlso(B.class)
@XmlRootElement(name = "a")
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class A{
escribí 'probablemente', porque depende de cómo se configura su contexto JAXB. Básicamente, debe asegurarse de que JAXB conozca todas las clases que se supone deben ser serializadas. Si su clase B
no se menciona en ningún otro lugar (por ejemplo, como un tipo de propiedad de una de las clases que ya conocen a ), entonces JAXB no tiene la oportunidad de saber cómo serializar las instancias de B
. La intención de la anotación @XmlSeeAlso
es asegurarse de que JAXB también tenga en cuenta estas clases enumeradas.
ACTUALIZACIÓN:
alternativa, se puede proporcionar la lista de todas las subclases al crear el objeto JAXBContext
usando JAXBContext.newInstance(Class...)
, por ejemplo:
JAXBContext.newInstance(A.class, B.class);
en lugar de
JAXBContext.newInstance(A.class);
que probablemente ya hacer.
Pero mi opinión es que esta es una solución peor, porque te hace pensar en clases relacionadas cada vez que usas JAXB en tu código. En la solución superior establece las relaciones una vez para siempre.
Y tengo getters/setters por supuesto. – Udi