Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Generar esquema XSD a partir de clases java

Generar esquema XSD a partir de clases java

Autor jc mouse miércoles, febrero 20, 2019

En un post anterior vimos como usar la herramienta XJC del JDK para generar clases java desde esquemas XSD (XML Schema Definition) puedes visitar el post en “Generar clases desde esquemas XSD“.

En este post conoceremos otra herramienta llamada schemagen que nos permite realizar lo inverso a xjc, es decir nos permite generar esquema XSD (XML Schema Definition) a partir de clases java. Su uso es bastante sencillo y al igual que xjc su funcionamiento es a través de una consola de comandos.

Para poder realizar el ejercicios de este post, es requisito indispensable tener java en el PATH del sistema, esto para poder usar java desde cualquier directorio del sistema.

Esquemas XML desde clases java.

Paso 1.

Lo primero que necesitamos son unas cuantas clases java que contengan anotaciones JAXB, es decir:

Clase Cliente: Esta clase esta formada por los atributos dni, nombre y un list de tipo Producto llamado productos, todos ellos con sus respectivos métodos GET y SET.

package org.example;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {    
    "dni",
    "nombre",
    "productos"
})
@XmlRootElement(name = "cliente")
public class Cliente {

    @XmlElement(name = "dni", required = true)
    private String dni;
    @XmlElement(name = "nombre", required = true)
    private String nombre;
    @XmlElementWrapper(name = "productos")
    @XmlElement(name = "producto")
    private ArrayList<Producto> productos;

    public Cliente() {}
    
    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public ArrayList<Producto> getProductos() {
        return productos;
    }

    public void setProductos(ArrayList<Producto> productos) {
        this.productos = productos;
    }

}

La clase Producto es la siguiente:

package org.example;
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.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 * @see https://www.jc-mouse.net
 * @author mouse
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {    
    "descripcion",
    "precio"        
})
@XmlRootElement(name = "producto")
public class Producto {

    @XmlAttribute(required = true)
    private String codigo;
    @XmlElement(name = "descripcion", required = true)
    protected String descripcion;
    @XmlElement(name = "precio", required = true)
    private double precio;

    public Producto() {}

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public double getPrecio() {
        return precio;
    }

    public void setPrecio(double precio) {
        this.precio = precio;
    }

}

Crea estas clases en algún lugar de tu PC por ejemplo:

Esquema XML

Paso 2

usando la consola de windows, ubícate en la carpeta donde están las clases del paso 1 y escribe :

schemagen -cp . *.java

Esto creara el esquema XML (XSD Schema) en la misma carpeta que los archivos java con el nombre “schema1.xsd”, es decir:

XSD java

El archivo XML generado (nuestro esquema XSD) es el siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="cliente" type="cliente"/>

  <xs:element name="producto" type="producto"/>

  <xs:complexType name="cliente">
    <xs:sequence>
      <xs:element name="dni" type="xs:string"/>
      <xs:element name="nombre" type="xs:string"/>
      <xs:element name="productos" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="producto" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="producto">
    <xs:sequence>
      <xs:element name="descripcion" type="xs:string"/>
      <xs:element name="precio" type="xs:double"/>
    </xs:sequence>
    <xs:attribute name="codigo" type="xs:string" use="required"/>
  </xs:complexType>
</xs:schema>

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

JTable editable con base de datos

JTable editable con base de datos

JTable es un componente swing java que nos permite mostrar datos en una tabla de una base de datos, sin embargo a difere...

Compartir texto plano con un ShareActionProvider en Android

Compartir texto plano con un ShareActionProvider en Android

Un Action Provider es un elemento que habita en la Action Bar para incrementar la accesibilidad de nuestras aplicaciones...

Campo autoincrement en PostgreSQL con pgAdminIII

Campo autoincrement en PostgreSQL con pgAdminIII

En Postgres a diferencia de MySQL, colocar un campo con un valor autonumerico incrementable es un poco más complicado pe...

Crear web multi-lenguaje con php

Crear web multi-lenguaje con php

En este tutorial realizaremos un proyecto web de un “sitio multi lenguaje” o “web multi idiomas”...

Crear animaciones con JQuery y Spritely

Crear animaciones con JQuery y Spritely

Spritely es un plugin para JQuery que te permite crear animaciones con puro javascript y así no tener que utilizar flash...

Esteganografia LSB en Java – [Proyecto Completo]

Esteganografia LSB en Java – [Proyecto Completo]

Mensajes ocultos utilizando el método de Inserción en el bit menos significativo (Least Significant Bit Insertion) El mé...

Comparte lo que sabes

Categorias

Últimas entradas

En un post anterior conocimos una herramienta Open Source con un conjunto de herramientas para el trabajo con imágenes e...

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

OCR (Optical Character Recognition) en español, Reconociminto Optico de Caracteres, es el proceso por el cual  se extrae...

La misión espacial de la NASA, el Mars  2020 Rover Mission esta proyectada para lanzarse en julio de 2020 y su llegada s...

Android Bolivia

MAUS