Utilización de herramientas de Schemagen JAXB para generar un archivo de esquema XML a partir de una clase Java
Utilice las herramientas de schemagen de JAXB (Java™ Architecture for XML Binding) para generar un archivo de esquema XML a partir de clases Java.
Antes de comenzar
Acerca de esta tarea
Utilice las API y herramientas JAXB para establecer correlaciones entre las clases Java y el 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 basados en XML). Después de que se generen los artefactos Java para la aplicación, puede crear un documento de esquema XML a partir de una aplicación Java existente que represente los elementos de datos de una aplicación Java utilizando el generador de esquemas JAXB, la herramienta de línea de mandatos schemagen . El generador de esquemas JAXB procesa archivos fuente Java o archivos de clase. Las anotaciones de clase Java proporcionan la posibilidad de personalizar las correlaciones predeterminadas de las clases Java existentes a los componentes de esquema generados. El archivo de esquema XML junto con los archivos de clase Java anotados contienen toda la información necesaria que el tiempo de ejecución JAXB necesita para analizar los documentos XML para la ordenación y desordenación.
Puede crear un documento de esquema XML a partir de una aplicación Java existente que represente los elementos de datos de una aplicación Java utilizando el generador de esquemas JAXB, la herramienta de línea de mandatos schemagen . El generador de esquemas JAXB procesa archivos fuente Java o archivos de clase. Las anotaciones de clase Java proporcionan la posibilidad de personalizar las correlaciones predeterminadas de las clases Java existentes a los componentes de esquema generados. El archivo de esquema XML junto con los archivos de clase Java anotados contienen toda la información necesaria que el tiempo de ejecución JAXB necesita para analizar los documentos XML para la ordenación y desordenació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 de Ant com.sun.tools.jxc.SchemaGenTask desde el entorno de compilación Ant para invocar la herramienta del generador de esquemas schemagen. Para funcionar correctamente, esta tarea Ant necesita que se invoque Ant utilizando 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 tienen el mismo nombre de tipo XML... Utilice @XmlType.name y @XmlType.namespace para asignarles nombres diferentes...Este error indica que tiene nombres de clase o valores de @XMLType.name que tienen el mismo nombre, pero existen en paquetes Java diferentes. Para impedir este error, añada la clase @XML.Type.namespace a la anotación @XMLType existente para distinguir entre los tipos de XML.
Ejemplo
- Copie el siguiente archivo
Bookdata.javaa un directorio temporal.package generated; 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.app_server_root\bin\schemagen.bat Bookdata.java
app_server_root/bin/schemagen.sh Bookdata.java
app_server_root/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.