Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Generar esquema XSD a partir de clases java

Generar esquema XSD a partir de clases java

Por 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

Artículos similares

Criba de Eratóstenes animado

Eratóstenes era un matemático griego del siglo  III a.C. el cual ideó una manera rápida de obtener todos los números pri[...]

Como crear un Grid en Pygame

Utilizando pygame para hacer gráficos en python, se muestra a continuación un sencillo ejemplo de cómo utilizar esta lib[...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, e[...]

Mapas en HTML5 – Uniendo todo – Parte 6

Última parte del tutorial «Mapas interactivos HTML5», vamos uniendo todo todo el código. En la parte 5 de este tutorial,[...]

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[...]

Genera videos, imagenes y más gratis con Qwen

Qwen es una familia de grandes modelos de lenguaje (LLMs) desarrollado por Alibaba Cloud. Este modelo multimodal es capa[...]