Estoy cambiando de Castor a JAXB2 para realizar el marshaling/unmarshaling entre objetos XML y Java. Tengo problemas para configurar una colección de objetos polimórficos.Configuración de la colección de objetos polimórficos para trabajar en JAXB2
XML de ejemplo
<project name="test project">
<orange name="fruit orange" orangeKey="100" />
<apple name="fruit apple" appleKey="200" />
<orange name="fruit orange again" orangeKey="500" />
</project>
clase Proyecto
La lista oranges
funciona bien, estoy viendo 2 naranjas en la lista. Pero no estoy seguro de cómo configurar fruitList
. El fruitList
debe tener 3 frutas: 2 naranjas y 1 manzana.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Project {
@XmlAttribute
private String name;
@XmlElement(name = "orange")
private List<Orange> oranges = new ArrayList<Orange>();
// Not sure how to configure this... help!
private List<Fruit> fruitList = new ArrayList<Fruit>();
}
clase de frutas
La fruta es una clase abstracta. Por alguna razón, definir esta clase como un resumen parece estar causando muchos problemas.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Fruit {
@XmlAttribute
private String name;
}
clase de Orange clase
public class Orange extends Fruit {
@XmlAttribute
private String orangeKey;
}
de Apple
public class Apple extends Fruit {
@XmlAttribute
private String appleKey;
}
¿Cómo puedo configurar mi fruitList
en Project
para lograr lo que quiero aquí?
¡Muchas gracias!
Estoy probando su enfoque ... Anoté el 'fruitList' propiedad con '@ XmlElementRef' y anotaciones' Orange' y 'Apple' classes con' @ XmlRootElement'. Ejecuté el código, y el 'fruitList' salió vacío. ¿Qué estoy haciendo mal aquí? Gracias. – limc
Descubrí el problema, tengo que agregar 'Orange.class' y' Apple.class' en 'JAXBContext.newInstance (..)' junto con 'Project'. Funciona ahora Gracias. – limc