En este ejemplo utilizare 2 objetos: "usuario" y dentro de este un bean "empresa".
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Empresa {
private int id;
private String nombre;
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
@XmlElement
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Usuario {
private String nombre;
private String apellido;
private int id;
private Empresa empresa;
public String getNombre() {
return nombre;
}
@XmlElement
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
@XmlElement
public void setApellido(String apellido) {
this.apellido = apellido;
}
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
public Empresa getEmpresa() {
return empresa;
}
@XmlElement
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
}
Se puede apreciar que estoy utilizando 3 anotaciones diferentes:
- @XmlRootElement .- esta anotación indica que la clase sera un bloque xml.
- @XmlElement .- esta anotación indica que sera un elemento del bloque xml.
- @XmlAttribute .- indica que la variable sera un atributo distintivo del bloque xml.
Ahora toca el turno de la clase encargada de convertir los beans de java a bloques xml.
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
//clase que hara el marshalling
public class JavaToXML {
public void marshalling( String rutaArchivo , Usuario bean ){
try {
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
//clase que hara el marshalling
public class JavaToXML {
public void marshalling( String rutaArchivo , Usuario bean ){
try {
//creamos un archivo
File file = new File( rutaArchivo );
//generamos una instancia de nuestro bean principal
JAXBContext jaxbContext;
jaxbContext = JAXBContext.newInstance(Usuario.class);
//preparamos la formacion del xml
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
//indicamos que el resultado xml debe estar con formato, es decir: identado y no en un renglon
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
//indicamos los destinos del xml resultante, en este caso el archivo y la consola
jaxbMarshaller.marshal( bean , file);
jaxbMarshaller.marshal( bean , System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
public static void main( String args [] ){
JavaToXML ejemplo = new JavaToXML();
Usuario bean = new Usuario();
bean.setNombre( "perla" );
bean.setApellido( "leal" );
bean.setId( 12 );
Empresa beanE = new Empresa();
beanE.setId( 2 );
beanE.setNombre( "Java-limos" );
bean.setEmpresa( beanE );
String rutaArchivo = "C:\\myEjemplo.xml";
ejemplo.marshalling( rutaArchivo , bean );
}
}
si ejecutamos el siguiente código obtendremos un archivo como el siguiente:
proseguimos a crear la clase encargada de convertir el xml en beans de javaleal Java-limos perla
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
//Unmarshaller
public class XMLToJava {
public void unmarshalling( String rutaArchivo ){
try {
//indicamos el archivo xml
File file = new File( rutaArchivo );
//creamos una instancia del bean principal
JAXBContext jaxbContext = JAXBContext.newInstance(Usuario.class);
//preparamos el convertidor xml a java
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
//extraemos la informacion
Usuario usuario = (Usuario) jaxbUnmarshaller.unmarshal(file);
System.out.println( "nombre: " + usuario.getNombre() );
System.out.println( "apellido: " + usuario.getApellido() );
System.out.println( "id: " + usuario.getId() );
System.out.println( "empresa: " + usuario.getEmpresa().getNombre() );
} catch (JAXBException e) {
e.printStackTrace();
}
}
public static void main( String args [] ){
XMLToJava ejemplo = new XMLToJava();
String rutaArchivo = "C:\\myEjemplo.xml";
ejemplo.unmarshalling( rutaArchivo );
}
}
Como se puede ver es un código muy sencillo, basta con leer un poco la documentación y ponerse a jugar con el para poder crear xml mas complejos.
saludos.