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.