Sobre @XmlSeeAlso
El propósito de la @XmlSeeAlso
anotación es sólo para dejar que su JAXB (JSR-222) aplicación sabe que cuando está procesando los metadatos para Resource
que también debe procesar los metadatos para el SomeItem
clase. Algunas personas creen erróneamente que está relacionado con la herencia del mapeo, ya que ese es el caso de uso con el que más se usa. Como las subclases de una clase no pueden determinarse utilizando la reflexión de Java, se usa @XmlSeeAlso
para informar a la implementación de JAXB que también se deben crear asignaciones para las subclases.
A continuación se muestra un ejemplo de cómo se puede apoyar su caso de uso:
Recursos
El nombre de tipo complejo correspondiente a una clase Java se suministra a través de la @XmlType
anotación.
package forum12288631;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="some_item")
public class Resource {
}
Demostración nombre de elemento
La raíz puede venir de la @XmlRootElement
anotación o puede ser suministrado a través de una instancia de JAXBElement
. Crearemos una instancia de JAXBElement
e indicaremos que se está reteniendo en una instancia de Object
. Cuando se combina esto, el atributo xsi:type
se incluirá en la salida.
package forum12288631;
import javax.xml.bind.*;
import javax.xml.namespace.QName;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Resource.class);
Resource resource = new Resource();
JAXBElement<Object> jaxbElement = new JAXBElement<Object>(QName.valueOf("resource"), Object.class, resource);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
}
}
salida
El XML resultante tiene el elemento raíz suministrada por el JAXBElement
y el valor del atributo xsi:type
proviene de la @XmlType
anotación en Resource
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="some_item"/>