Tengo una clase de Animal y una extensión de Animal llamada AnimalExtension.JAXB @XmlElements, diferentes tipos pero el mismo nombre?
public class Animal
public class AnimalExtension extends Animal
La única diferencia entre las dos clases es que AnimalExtension tiene otra variable de instancia llamada animalId. Animal no tiene esta variable de instancia.
También tengo mi propio tipo de datos que quiero agrupar y unamarshal a XML. Este tipo de datos se llama AnimalList. dentro de AnimalList, hay una lista de Animales como una variable de instancia.
@XmlType(name = "AnimalList")
public class AnimalList{
private List<Animal> animalList;
....
animalList puede contener tanto Animal como AnimalExtension. Sin embargo, en XML no quiero que el elemento se denomine AnimalExtension; Quiero que todos tengan el nombre del elemento Animal. Solo quiero que aparezca el atributo extra cuando JAXB sepa que Animal es en realidad una instancia de AnimalExtension. Así que si tengo una lista de que se parece a
List<Animal> animalList = new LinkedList<Animal>();
AnimalExtension animalExtension = new AnimalExtension();
animalExtension.setAnimalId(1);
amimalExtension.setName("Don");
Animal animal = new Animal();
animal.setName("Mike");
animalList.add(animalExtension);
animalList.add(animal);
Quiero que el XML para que parezca
<AnimalList>
<Animal name="Don" id="1" />
<Animal name="Mike" />
</AnimalList>
Esto es lo que he tratado de hacer
@XmlElements(
{
@XmlElement(name = "Animal", type = Animal.class),
@XmlElement(name = "Animal", type = AnimalExtension.class)
}
)
public List<Animal> getEntries() {
return animalList;
}
El código se compila pero cuando intento ejecutar mi servidor Me da este extraño error que no está relacionado con lo que está sucediendo (BeanCreationException). Intenté hacer que el nombre de XmlElement fuera diferente para cada tipo y eso funciona, pero el desafío aquí es hacer que el nombre sea el mismo.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'encryptionPayloadContentProvider'
Dado un XML cómo se supone que JAXB para determinar qué clase que se utiliza para la creación de objetos de Java? ¿Es la existencia del atributo 'id'? ¿Qué pasa si hay otra clase llamada 'AnimalEnhacement' con el atributo id? –
buen punto lol. no pensé en eso. – denniss