java xml xsd jaxb unmarshalling

java - ClassCastException mientras deshace XML con JAXB



xsd unmarshalling (2)

Puedes intentar hacer esto:

Object o = unmarshaller.unmarshal(...); System.out.println(o.getClass().getName());

He generado clases Java usando xjc de un xsd donde el elemento raíz era A de tipo AType .

El elemento raíz generado por jaxb es AType y no se ha generado ninguna clase A

Cuando trato de deshacer un xml correspondiente a ese xsd y lanzar el JaxbElement, lanza una excepción de conversión:

Retazo:

JAXBContext jaxbContext = JAXBContext.newInstance(Class.forName("AType"));
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
AType aType = (AType) unmarshaller.unmarshal(new ByteArrayInputStream(xmlString.getBytes()));

Excepción:

java.lang.ClassCastException: javax.xml.bind.JAXBElement

El mismo código para otros casos se ejecuta correctamente y se deserializa con éxito.

¿Cómo puedo encontrar unmarshal() me da objeto de qué tipo? No tengo idea de qué está pasando en esta situación. He intentado imprimir campos en ese jaxbElement pero no fue muy útil.


Si la clase del elemento raíz (aquí: AType) no contiene XmlRootElement -annotation, entonces el elemento raíz devuelto se envuelve en un JAXBElement y debe usar getValue () -method para obtener el elemento raíz.

AFAIK, XJC solo generará la anotación XmlRootElement si el tipo del elemento raíz es de tipo anónimo.