Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Generar clases desde Esquemas XSD

Generar clases desde Esquemas XSD

Autor jc mouse lunes, febrero 18, 2019

XJC es una herramienta de linea de comandos del compilador de esquemas de JAXB que se puede utilizar para convertir un esquema XML (entre otro tipo de archivos como NG, DTD, WSDL, etc) a representaciones de clase.​ Las clases se generaran junto a anotaciones del espacio de nombres javax.xml.bind.annotation.*.

El Esquema que utilizaremos se llama MiEsquema.xsd, este esquema lo utilizamos en otro post [Validación de documentos XML con XSD] y es el esquema de un pequeño formulario.

Al ser xjc una herramienta por linea de comandos antes de continuar con el post, se debe asegurar que java este incluida en el PATH del sistema.

Comencemos.

Crea un nuevo archivo XSD en tu pc con el siguiente código y guarda con el nombre MiEsquema.xsd.

<?xml version="1.0"?>
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
    <xs:element name="formulario">
        <xs:complexType>
            <xs:sequence>
                <!-- Nombre de usuario -->
                <xs:element name="nombre" >
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:minLength value="6" />
                            <xs:maxLength value="32" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <!-- Edad, solo mayores de 18 años -->
                <xs:element name="edad">
                    <xs:simpleType>
                        <xs:restriction base="xs:integer">
                            <xs:minInclusive value="18" />
                            <xs:maxInclusive value="99" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>              
                <!-- Correo electonico -->
                <xs:element name="mail">
                    <xs:simpleType> 
                        <xs:restriction base="xs:string"> 
                            <xs:pattern value="[^@]+@[^\.]+\..+"/> 
                        </xs:restriction> 
                    </xs:simpleType> 
                </xs:element>
                
            </xs:sequence>
        </xs:complexType>        
    </xs:element>
</xs:schema>

Abre un consola de comandos y posicionate en el lugar donde esta tu archivo XSD.

A continuación escribe:

xjc -d src -p org.example MiEsquema.xsd

donde:

  • xjc: Herramienta de linea de comandos
  • -d src: Los archivos generados se crearan en esa carpeta «src» (El directorio debe existir).
  • -p org.example: Indica el paquete (package) de destino, para este ejemplo el paquete es «org.example»
  • MiEsquema.xsd:  Es el esquema base para la creación de clases

Si deseas más información, utiliza el comando x:\>xjc -help para desplegar ayuda en pantalla

Este es el comando básico para la generación de clases java, para ejecutar el comando presiona la tecla [ENTER].

xjc ejemplo xsd

Los archivos generados son:

  • Formulario.java: Es la representación en código java del esquema XSD
  • ObjectFactory.java: Un ObjectFactory permite construir programáticamente nuevas instancias de la representación de Java para contenido XML. La representación de Java del contenido XML puede consistir en interfaces y clases derivadas de esquemas que representan el enlace de definiciones de tipo de esquema, declaraciones de elementos y grupos de modelos  Para un ejemplo como el de este post no nos sirve de mucho, su verdadera utilidad se nota con esquemas más complejos.

Archivo Formulario.java generado desde un XSD con la herramienta XJC

package org.example;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Clase Java para anonymous complex type.
 * 
 * <p>El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="nombre">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
 *               &lt;minLength value="6"/>
 *               &lt;maxLength value="32"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *         &lt;element name="edad">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}integer">
 *               &lt;minInclusive value="18"/>
 *               &lt;maxInclusive value="99"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *         &lt;element name="mail">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
 *               &lt;pattern value="[^@]+@[^\.]+\..+"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "nombre",
    "edad",
    "mail"
})
@XmlRootElement(name = "formulario")
public class Formulario {

    @XmlElement(required = true)
    protected String nombre;
    protected int edad;
    @XmlElement(required = true)
    protected String mail;

    /**
     * Obtiene el valor de la propiedad nombre.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Define el valor de la propiedad nombre.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setNombre(String value) {
        this.nombre = value;
    }

    /**
     * Obtiene el valor de la propiedad edad.
     * 
     */
    public int getEdad() {
        return edad;
    }

    /**
     * Define el valor de la propiedad edad.
     * 
     */
    public void setEdad(int value) {
        this.edad = value;
    }

    /**
     * Obtiene el valor de la propiedad mail.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getMail() {
        return mail;
    }

    /**
     * Define el valor de la propiedad mail.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setMail(String value) {
        this.mail = value;
    }

}

Como vimos en este post el código generado por xjc es bastante limpio y nos ahorra mucho tiempo de programación. Si bien el código generado se puede agregar directamente a un proyecto java, en ocasiones tendremos que realizar pequeñas modificaciones sobre este, pero aun así, es mucho más rápido que tener que hacerlo todo por nosotros mismos.

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Tabla con imagen de fondo

Tabla con imagen de fondo

En este post personalizaremos una tabla JTable Swing para pintar una imagen de fondo y darle un poco de estilo al encabe...

API completo y ligero para el uso de webcams desde java

API completo y ligero para el uso de webcams desde java

Webcam Capture es un API  que permite usar una cámara web incorporada o externa directamente desde código Java utilizand...

Simulador de Arduino on line

Simulador de Arduino on line

123d.circuits.io es una aplicación web propiedad de Autodesk que permite construir circuitos en un protoboard virtual. C...

Introducción a la edición de imágenes con ImageMagick

Introducción a la edición de imágenes con ImageMagick

ImageMagick es un software de código abierto multiplataforma que contiene una serie de herramientas para leer, mostrar,...

Detectar un punto dentro de un polígono HTML5

Detectar un punto dentro de un polígono HTML5

En un ejemplo anterior [Seleccionar y mover shapes en html5] se utilizo un método sencillo para detectar si un punto se...

Procedimientos Almacenados: Parámetros OUT

Procedimientos Almacenados: Parámetros OUT

En un post anterior conocimos que es y como funciona un parámetro de entrada IN en procedimientos almacenados y lenguaje...

Comparte lo que sabes

Categorias

Últimas entradas

Una clase JTree permite mostrar datos de una forma jerárquica y en realidad este objeto no contiene sus datos; es decir,...

Los archivos digitales (txt, docx, xlsx, odt, odp, pdf, etc) nos permiten almacenar información el cual en ocasiones, de...

En este post crearemos un botón swing que reproducirá un sonido cuando este sea presionado por el usuario.  Sin mas que...

Muchas veces necesitamos de fotos para adornar nuestros perfiles en RRSS pero no queremos subir nuestras propias fotos p...

Herramientas

Generador de Enlaces a Whatsapp