/ / alternativa a @XmlSeeAlso - java, jaxb

alternativa a @XmlSeeAlso - java, jaxb

abstract Class A{

}


Class B extends A{

}


@XmlRootElement
Class C {
@XmlElement(name = "tobeserialized")
A tobeserialized;
}


Class D{
public void marshal(){
C all = getData();
JAXB.marshal(all, new File("saved.xml");

}

}

para que JAXB sepa que la clase B es una subclase de la clase A, necesitaría poner un @XmlSeeAlso (value = {B.class}) en la clase A. Tenemos alrededor de 50 subclases de A.

Pero la dependencia del proyecto es tal que la Clase A se encuentra en un paquete que no puede acceder a la Clase B. Por lo tanto, no puedo poner la anotación en la Clase A.

¿Cuáles pueden ser las alternativas a considerar, para que JAXB pueda serializar las subclases de la Clase A?

Respuestas

3 para la respuesta № 1

los @XmlSeeAlso la anotación no se requiere al mapear una relación de herencia, pero es cuando más se usa. La función de @XmlSeeAlso es decirle a JAXB que introduzca y produzca metadatos para las clases que no se pueden inferir al atravesar la clase.

En tu ejemplo si creaste el JAXBContext sólo en el C clase (JAXBContext.newInstance(C.class)) entonces el A clase también sería procesada debido a la tobeserialized campo, pero B no lo haría porque no hay un mecanismo en Java para encontrar subclases. Podrías resolver esto poniendo @XmlSeeAlso(B.class) en A o incluyendo las subclases en las clases utilizadas para arrancar el JAXBContext:

JAXBContext.newInstance(B.class, C.class);

0 para la respuesta № 2

Ha pasado mucho tiempo para mí, pero puede intentar agregar @XmlTransient en la clase A y @XmlType en la clase B.

O @XmlTransient en las clases A y B (ya que son abstractas) y agregar @XmlType Subclases concretas.