Crear y leer un objeto en Java utilizando un XSD y XML

Algo un poco más útil que leer un XML, es crear un clase en Java utilizando un archivo XSD para posteriormente instanciar u objecto utilizando un XML.

Mi archivo XSD es:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="MiClase">
 <xs:complexType>
 <xs:simpleContent>
 <xs:extension base="xs:string">
 <xs:attribute type="xs:string" name="Nombre"/>
 <xs:attribute type="xs:string" name="Apellido"/>
 <xs:attribute type="xs:short" name="Edad"/>
 <xs:attribute type="xs:dateTime" name="FechaNacimiento"/>
 </xs:extension>
 </xs:simpleContent>
 </xs:complexType>
 </xs:element>
</xs:schema>

Creamos la clase utilizando el comando xjc ubicado en el directo bin de JAVA_HOME:

xjc .exe MiClase.exe

Seguimos agregando, ahora la clase recién creada:

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// See http://java.sun.com/xml/jaxb 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2014.08.27 at 12:30:00 PM CDT 
//


package MiPaquete;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.datatype.XMLGregorianCalendar;


/**
 * Java class for anonymous complex type. * 
 * The following schema fragment specifies the expected content contained within this class. * *
 * <complexType>
 *   <simpleContent>
 *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
 *       <attribute name="Nombre" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       <attribute name="Apellido" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       <attribute name="Edad" type="{http://www.w3.org/2001/XMLSchema}short" />
 *       <attribute name="FechaNacimiento" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
 *     </extension>
 *   </simpleContent>
 * </complexType>
 **/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
@XmlRootElement(name = "MiClase")
public class MiClase {

@XmlValue
protected String value;
@XmlAttribute(name = "Nombre")
protected String nombre;
@XmlAttribute(name = "Apellido")
protected String apellido;
@XmlAttribute(name = "Edad")
protected Short edad;
@XmlAttribute(name = "FechaNacimiento")
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar fechaNacimiento;

/**
* Gets the value of the value property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getValue() {
return value;
}

/**
* Sets the value of the value property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setValue(String value) {
this.value = value;
}

/**
* Gets the value of the nombre property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getNombre() {
return nombre;
}

/**
* Sets the value of the nombre property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setNombre(String value) {
this.nombre = value;
}

/**
* Gets the value of the apellido property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getApellido() {
return apellido;
}

/**
* Sets the value of the apellido property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setApellido(String value) {
this.apellido = value;
}

/**
* Gets the value of the edad property.
*
* @return
* possible object is
* {@link Short }
*
*/
public Short getEdad() {
return edad;
}

/**
* Sets the value of the edad property.
*
* @param value
* allowed object is
* {@link Short }
*
*/
public void setEdad(Short value) {
this.edad = value;
}

/**
* Gets the value of the fechaNacimiento property.
*
* @return
* possible object is
* {@link XMLGregorianCalendar }
*
*/
public XMLGregorianCalendar getFechaNacimiento() {
return fechaNacimiento;
}

/**
* Sets the value of the fechaNacimiento property.
*
* @param value
* allowed object is
* {@link XMLGregorianCalendar }
*
*/
public void setFechaNacimiento(XMLGregorianCalendar value) {
this.fechaNacimiento = value;
}

}

Posteriormente, agregamos las clases:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

Por último creamos el código:

JAXBContext jaxbContext = JAXBContext.newInstance(MiClase.class);

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

byte[] xml = 
	"<MiClase Nombre=\"Qbit\" Apellido=\"Mexhico\" Edad=\"0\" FechaNacimiento=\"2014-08-27T11:30:29\" />".getBytes();

MiClase miClase = 
	(MiClase)unmarshaller.unmarshal(
		new ByteArrayInputStream(
			xml
		));

System.out.println("Mi nombre es: "+miClase.getNombre());        
System.out.println("Mi apellido es: "+miClase.getApellido());       

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *