Buscar este blog

lunes, 22 de diciembre de 2014

Java: XSD to POJO

Se parte de un XSD y se generan las clases Java correspondientes.
Se empleará JAXB.

La herramienta que se usará es xjc, que viene instalada en el directorio \bin de los JDK. Si no se tiene esta ruta dentro del path, simplemente habrá que referenciarla desde una ventana de comandos.


Se necesita un fichero de binding para que se cree una clase por cada elemento del XSD, sino, se generará una única clase pública con clases internas.

Fichero jaxb-binding.xml:

<jaxb:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    version="2.1">
    <jaxb:globalBindings localScoping="toplevel"/>
</jaxb:bindings>


Con esto, sólo hace falta tener el XSD que se quiera mapear, por ejemplo, el famoso employee.xsd:


<?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="employee" type="employee"/>

  <xs:complexType name="employee">
    <xs:sequence>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="salary" type="xs:double"/>
      <xs:element name="designation" type="xs:string" minOccurs="0"/>
      <xs:element name="address" type="address" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="address">
    <xs:sequence>
      <xs:element name="city" type="xs:string" minOccurs="0"/>
      <xs:element name="line1" type="xs:string" minOccurs="0"/>
      <xs:element name="line2" type="xs:string" minOccurs="0"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="zipcode" type="xs:long"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>


Finalmente, se lanza el comando:

xjc.exe -d . -p es.pruebas.jaxb -b jaxb-binding.xml employee.xsd


1 comentario: