XSTREAM
XStream es una librería de Java, que sirve para serializar objetos Java a XML y viceversa.
Para poder usarla, debemos descargar la librería de su web e importar [Link] y
[Link] en nuestro proyecto.
ESCRIBIR XML A PARTIR DE UN .DAT :
// .dat no de objetos
File fichero = new File("src/[Link]");
FileInputStream filein = new FileInputStream(fichero);
DataInputStream dataIS = new DataInputStream(filein);
// .dat de objetos
// File fichero = new File ("src/[Link]") ;
// FileInputStream filein = new FileInputStream(fichero) ;
// ObjectInputStream objectIS = new ObjectInputStream(filein);
ListaDepartamentos lista = new ListaDepartamentos();
int numero;
String nombre, localidad;
// Leemos los ATRIBUTOS del archivo y creamos los objetos
departamento y los añadimos a la lista
try {
while (true) {
numero = [Link]();
nombre = [Link]();
localidad = [Link]();
Departamento departamento = new Departamento(numero,
nombre, localidad);
lista.añadirDepartamento(departamento);
}
} catch (EOFException e) {}
[Link]();
// Leemos los OBJETOS del archivo y los añadimos a la lista
// try {
// while (true) {
// Departamento departamento = (Departamento)
[Link]();
// lista.añadirDepartamento(departamento);
// }
// } catch (EOFException e) {}
// [Link]();
try {
XStream xstream = new XStream(new StaxDriver());
[Link]([Link]);
[Link]("Departamentos", [Link]);
// .alias (nombre etiqueta, [Link]) por cada clase, le
asignamos un nombre a la etiqueta
[Link]("Departamento", [Link]);
[Link]("NombreDepartamento", [Link],
"nombre");
// .aliasField (nuevo nombre, [Link], atributo) para
cambiar la etiqueta de los atributos de una clase
[Link]("NumeroDepartamento", [Link],
"numero");
[Link]([Link],
"departamentos");
// .addImplicitCollection(clase [Link], nombre del
arraylist) para las listas, que no salga la etiqueta
[Link](lista, new
FileOutputStream("[Link]"));
// .toXML (arraylist, new FOS([Link]))
} catch (Exception e) {
[Link]();
}
PASAR UN XML A OBJETO Y LEERLO:
XStream xstream = new XStream(new StaxDriver());
[Link]([Link]);
[Link]("Departamentos", [Link]);
[Link]("Departamento", [Link]);
[Link]("NombreDepartamento", [Link], "nombre");
[Link]("NumeroDepartamento", [Link], "numero");
[Link]([Link],
"departamentos");
try {
FileInputStream fileInputStream = new
FileInputStream("[Link]");
ListaDepartamentos listaDepartamentos = (ListaDepartamentos)
[Link](fileInputStream);
ArrayList<Departamento> listaDep =
[Link]();
for (Departamento d : listaDep) {
[Link]([Link]());
}
} catch (FileNotFoundException e) {
[Link]("Archivo XML no encontrado");
}
JAXB
Java Architecture for XML Binding (JAXB) es una tecnología que permite mapear
clases Java a representaciones XML y viceversa. Vamos a utilizar JavaBeans, que
serán las clases que se van a se van a mapear. Son clases primitivas Java (POJOs
- Plain Old Java Objects) con las propiedades, getter y setter, el constructor sin
parámetros y el constructor con las propiedades. En estas clases que mapear se
añadirán las Anotaciones, que son las indicaciones que ayudan a convertir el
JavaBean en XML.
Para ello cuenta con dos funciones principales:
- Presentar un objeto Java en XML (Serializar) mediante un proceso llamado
marshall.
- Presentar un XML en un objeto Java (Deserializar) mediante un proceso
llamado unmarshall.
Importaciones para anotaciones:
import [Link];
import [Link];
import [Link];
import [Link];
Principales anotaciones:
Sobre la clase:
@XmIRootElement(namespace = "namespace"): Define la raíz del XML.
@XmlType(propOrder = { "field2", "field1",.. }): Permite definir en qué orden se van
a escribir los elementos (o las etiquetas) dentro del XML.
Sobre su get:
@XmlElement(name = "nombre"): Define el elemento de XML que se va usar.
Si el atributo es una colección (array, list, etc...) debe llevar dos anotaciones,
@XmlElementWrapper y @XmlElement, esta última, con un nombre si se desea.
IMPORTACIONES CÓDIGO PRINCIPAL:
import [Link];
import [Link];
import [Link];
CÓDIGO PRINCIPAL OBJETO A XML:
Instanciamos el contexto, indicando la clase que será el RootElement, en nuestro
ejemplo es la clase Biblioteca:
JAXBContext context = [Link]([Link]);
Creamos un Marshaller, que es la clase capaz de convertir nuestro JavaBean, en
una cadena XML:
Marshaller marshaller = [Link]();
Indicamos que vamos a querer el XML con un formato amigable (saltos de línea,
sangrado, etc)
[Link](Marshaller.JAXB_FORMATTED_OUTPUT,
[Link]);
Hacemos la conversión llamando al método marshal, pasando una instancia del
JavaBean que queramos convertir a XML y un OutputStream
[Link](biblioteca, new File("src/[Link]"));
Ejemplo:
CÓDIGO PRINCIPAL XML A OBJETO:
Instanciamos el contexto, indicando la clase que será el RootElement, en nuestro
ejemplo Biblioteca:
JAXBContext context = [Link] ([Link]);
Se crea Unmarshaller en el coxtexto de la clase Biblioteca:
Unmarshaller unmars = [Link] ();
Utilizamos el método unmarshal, para obtener datos de un Reader (un file):
Biblioteca biblioteca = (Biblioteca) [Link] (new
FileReader ("[Link]"));
ArrayList<Librerias> librerias = [Link]();
for (Libreria l : librerias) {
[Link]([Link]());
}