Utilización de las herramientas JAXB schemagen para generar un archivo de esquemas XML a partir de una clase Java
Utilice la herramienta JAXB (arquitectura Java™ para enlaces XML) para generar un archivo de esquemas XML a partir de clases Java.
Antes de empezar
Acerca de esta tarea
Utilice las herramientas y las API de JAXB para establecer correlaciones entre clases Java y un esquema XML. Los documentos de esquema XML describen los elementos de datos y las relaciones de un documento XML. Después de un enlace o una correlación de datos, puede convertir documentos XML en objetos Java, y viceversa. Ahora puede acceder a datos almacenados en un documento XML sin la necesidad de comprender la estructura de los datos.
Para desarrollar servicios web utilizando un enfoque de desarrollo ascendente a partir de JavaBeans o enterprise beans existentes, utilice la herramienta wsgen para generar los artefactos para aplicaciones JAX-WS (API de Java para servicios web XML). Tras generar los artefactos de Java para la aplicación, puede crear un documento de esquema XML a partir de una aplicación Java existente que representa los elementos de datos de una aplicación Java utilizando la herramienta de la línea de mandatos del generador de esquemas JAXB, schemagen. El generador de esquemas JAXB procesa archivos de clase o archivos de origen Java. Las anotaciones de las clases Java proporcionan la capacidad de personalizar las correlaciones predeterminadas de clases Java existentes con componentes de esquema generados. El archivo de esquema XML junto con los archivos de clase Java anotados contienen toda la información necesaria que requiere el tiempo de ejecución JAXB para analizar los documentos XML para la clasificación y desclasificación.
Puede crear un documento de esquema XML a partir de una aplicación Java existente que representa los elementos de datos de una aplicación Java, utilizando la herramienta de la línea de mandatos del generador de esquemas JAXB, schemagen. El generador de esquemas JAXB procesa archivos de clase o archivos de origen Java. Las anotaciones de las clases Java proporcionan la capacidad de personalizar las correlaciones predeterminadas de clases Java existentes con componentes de esquema generados. El archivo de esquema XML junto con los archivos de clase Java anotados contienen toda la información necesaria que requiere el tiempo de ejecución JAXB para analizar los documentos XML para la clasificación y desclasificación.



JAXB proporciona soporte de compilación que permite configurar el esquema schemagen del generador de modo que no genere automáticamente un esquema nuevo. Esto resulta útil si está utilizando un esquema común como, por ejemplo, W3C (World Wide Web Consortium), XML Schema, WSDL (Web Services Description Language) o WS-Addressing y no desea que se genere un nuevo esquema para uno de los paquetes a los que se hace referencia. El atributo location de la anotación @XmlSchema hace que el generador schemagen se refiera al URI del esquema existente, en lugar de generar uno nuevo.
Además de utilizar la herramienta schemagen desde la línea de mandatos, puede invocar esta herramienta JAXB desde entornos de compilación Ant. Utilice la tarea Ant com.sun.tools.jxc.SchemaGenTask desde el entorno de compilación Ant para invocar la herramienta del generador de esquemas schemagen. Para que funcione debidamente, esta tarea Ant requiere que se invoque Ant mediante el script ws_ant.

- Suministre un archivo package-info.java con @XmlSchema; por ejemplo:
schemagen sample.Address sample\package-info.java
- Utilice el atributo namespace de la anotación @XmlType para especificar un espacio de nombres;
por ejemplo:
@XmlType(namespace="http://myNameSpace")
Procedimiento
Resultados
Ahora que ha generado un archivo de esquema XML a partir de clases Java, está preparado para clasificar y desclasificar los objetos Java como documentos de instancia XML.

Error: dos clases tiene el mismo nombre de tipo XML ....
Utilice @XmlType.name y @XmlType.namespace para asignarles nombres diferentes...
Este error indica que tiene nombres de clases o valores @XMLType.name con el mismo nombre, pero que existen dentro de paquetes Java diferentes. Para evitar este error,
añada la clase @XML.Type.namespace a la anotación @XMLType existente para diferenciar
entre los tipos XML.gotchaEjemplo
- Copie el siguiente archivo Bookdata.java a un directorio temporal.
paquete generado; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "bookdata", propOrder = { "author", "title", "genre", "price", "publishDate", "description" }) public class Bookdata { @XmlElement(required = true) protected String author; @XmlElement(required = true) protected String title; @XmlElement(required = true) protected String genre; protected float price; @XmlElement(name = "publish_date", required = true) protected XMLGregorianCalendar publishDate; @XmlElement(required = true) protected String description; @XmlAttribute protected String id; public String getAuthor() { return author; } public void setAuthor(String value) { this.author = value; } public String getTitle() { return title; } public void setTitle(String value) { this.title = value; } public String getGenre() { return genre; } public void setGenre(String value) { this.genre = value; } public float getPrice() { return price; } public void setPrice(float value) { this.price = value; } public XMLGregorianCalendar getPublishDate() { return publishDate; } public void setPublishDate(XMLGregorianCalendar value) { this.publishDate = value; } public String getDescription() { return description; } public void setDescription(String value) { this.description = value; } public String getId() { return id; } public void setId(String value) { this.id = value; } }
- Abra un indicador de mandatos.
- Ejecute la herramienta del generador de esquemas schemagen desde el directorio donde ha copiado el archivo Bookdata.java.
raíz_servidor_aplic\bin\schemagen.bat Bookdata.java
raíz_servidor_aplic/bin/schemagen.sh Bookdata.java
raíz_servidor_aplic/bin/schemagen Bookdata.java
- Se genera el archivo de esquema XML schema1.xsd:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="bookdata"> <xs:sequence> <xs:element name="author" type="xs:string"/> <xs:element name="title" type="xs:string"/> <xs:element name="genre" type="xs:string"/> <xs:element name="price" type="xs:float"/> <xs:element name="publish_date" type="xs:anySimpleType"/> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="id" type="xs:string"/> </xs:complexType> </xs:schema>
Consulte la documentación de la implementación de la referencia JAXB, si desea información adicional sobre el mandato schemagen.