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

Identifique las clases Java o un conjunto de objetos Java para correlacionarlos con un archivo de esquema XML.

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.

Supported configurations Supported configurations: Las herramientas de línea de mandatos wsimport, wsgen, schemagen y xjc no tienen soporte en la plataforma z/OS. Esta funcionalidad la proporcionan las herramientas de ensamblaje proporcionadas con WebSphere Application Server que se ejecutan en la plataforma z/OS. Obtenga información sobre estas herramientas de línea de mandatos para las aplicaciones JAX-WS para obtener más información sobre estas herramientas. sptcfg
Best practice Best practice: WebSphere Application Server proporciona la API Java para servicios web basados en XML (JAX-WS) y las herramientas de arquitectura Java para enlaces XML (JAXB). Las herramientas de línea de mandatos wsimport, wsgen, schemagen y xjc se encuentran en el directorio raíz_servidor_aplicaciones\bin\ de WebSphere Application Server tradicional. Los mandatos xjc y schemagen se encuentran en el directorio raíz_servidor_aplicaciones\jaxb\bin\ del perfil Liberty. En algunas ocasiones, los artefactos generados por las herramientas que proporcionan WebSphere Application Server y JDK dan soporte a los mismos niveles de las especificaciones. En general, los artefactos generados por las herramientas JDK tienen portabilidad en otros entornos de ejecución compatibles. Sin embargo, es más recomendable utilizar las herramientas que se proporcionan con este producto para alcanzar una integración sin interrupciones dentro del entorno de WebSphere Application Server y aprovechar las características que puedan estar soportadas únicamente en WebSphere Application Server. Para aprovechar las herramientas de JAX-WS y JAXB V2.2, utilice las herramientas que se proporcionan con el servidor de aplicaciones y que se encuentran en el directorio raíz_servidor_aplicaciones\bin\.bprac
Supported configurations Supported configurations: Este producto da soporte a la especificación JAXB 2.2. JAX-WS 2.2 requiere JAXB 2.2 para el enlace de datos. sptcfg

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.

Avoid trouble Avoid trouble: Al ejecutar la herramienta schemagen, el generador de esquemas no lee correctamente las anotaciones @XmlSchema del archivo de clases package-info para derivar targetNamespaces. En lugar de utilizar la anotación @XMLSchema, utilice uno de los métodos siguientes:
  • 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")
gotcha

Procedimiento

  1. Localice los archivos de origen Java o los archivos de clase Java para utilizarlos cuando se genere un archivo de esquema XML. Asegúrese de que todas las clases a las que hacen referencia los archivos de clase Java están incluidas en la vía de acceso de clases o que se proporcionan a la herramienta utilizando las opciones -classpath/-cp.
  2. Utilice el mandato del generador de esquemas JAXB, schemagen , para generar un esquema XML. El generador de esquemas se encuentra en el directorio raíz_servidor_aplic\bin\.
    [Windows]
    raíz_servidor_aplicaciones\bin\schemagen.bat myObj1.java myObj2.java
    [AIX][HP-UX][Linux][Solaris]
    raíz_servidor_aplicaciones/bin/schemagen.sh myObj1.java myObj2.java
    [IBM i]
    raíz_servidor_aplicaciones/bin/schemagen myObj1.java myObj2.java

    Los parámetros myObj1.java y myObj2.java son los nombres de los archivos Java que contienen los objetos de datos. Si myObj1.java o myObj2.java hace referencia a las clases Java que no se pasan al mandato schemagen, debe utilizar la opción -cp para proporcionar la localización de la vía de acceso de clases a estas clases de Java.

    Obtenga información sobre el mandato schemagen para obtener más información sobre este mandato y las opciones adicionales que se pueden especificar.
  3. (Opcional) Utilice las anotaciones de programa JAXB definidas en el paquete javax.xml.bind.annotations para personalizar las correlaciones de esquema XML JAXB.
  4. (Opcional) Configure la propiedad location en la anotación @XmlSchema para indicar al compilador del esquema que utilice un esquema existente, en lugar de generar uno nuevo. Por ejemplo:
    @XmlSchema(namespace="foo")
    package foo;
    @XmlType
    class Foo {
    @XmlElement Bar zot;
    }
    @XmlSchema(namespace="bar",
    location="http://example.org/test.xsd")
    package bar;
    @XmlType
    class Bar {
    ...
    }
    <xs:schema targetNamespace="foo">
    <xs:import namespace="bar"
    schemaLocation="http://example.org/test.xsd"/>
    <xs:complexType name="foo">
    <xs:sequence>
    <xs:element name="zot" type="bar:Bar" xmlns:bar="bar"/>
    </xs:sequence>
    </xs:complex
    location="http://example.org/test.xsd" indica la ubicación en el esquema existente para la herramienta schemagen y no se genera un esquema nuevo.

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.

Avoid trouble Avoid trouble: El mandato schemagen no distingue el espacio de nombres XML entre varias anotaciones @XMLType que tienen el mismo nombre @XMLType definido en distintos paquetes Java. Cuando se produce este escenario, se genera el error siguiente:
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.gotcha

Ejemplo

En el ejemplo siguiente se muestra cómo las herramientas JAXB pueden generar un archivo de esquema XML a partir de una clase Java existente, Bookdata.java.
  1. 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;
        }
    
    }
  2. Abra un indicador de mandatos.
  3. Ejecute la herramienta del generador de esquemas schemagen desde el directorio donde ha copiado el archivo Bookdata.java.
    [Windows]
    raíz_servidor_aplic\bin\schemagen.bat Bookdata.java
    [Linux][AIX][HP-UX][Solaris]
    raíz_servidor_aplic/bin/schemagen.sh Bookdata.java 
    [IBM i]
    raíz_servidor_aplic/bin/schemagen Bookdata.java
  4. 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.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxbjava2schema
File name: twbs_jaxbjava2schema.html