Zacznijmy od rzeczy prostych, żeby nie mówić trywialnych XStream . Biblioteka pozwala nam na wygodną serializację obiektów do postaci XML. Żeby się nie chwalić po puściźnie tego rozwiązania zerknijmy na prosty przykład:
Mamy beana
public class Book {
private String title;
private String author;
private String description;
public Book(String title, String description) {
this.description = description;
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getAuthor() {
return author;
}
public String getTitle() {
return title;
}
}
A oto sposób jak go serializować:
public class Serializer {
/**
* @param args
*/
public static void main(String[] args) {
Book book = new Book("Rok 1984", "George Orwell");
XStream xStream = new XStream();
System.out.println(xStream.toXML(book));
}
}
Co z tego otrzymamy ?
<org.nugae.model.Book>
<title>Rok 1984</title>
<author>George Orwell</author>
</org.nugae.model.Book>
Okazuje się, że możemy usunąć wszystkie gettery i nadal będzie działało. XStream korzysta z mechanizmu konwerterów. Mechanizm jest rozszerzalny i w następnym odcinku
zrobimy sobie własne
. Biblioteka dostarcza konwertery do większości kolekcji, typów prostych etc. (możecie sobie sprawdzić w dokumentacji. Zawiera również ten, który zadziałał w naszym przypadku, który oparty jest o mechanizm refleksji a nazywa się ReflectionConverter.
Polecam napisanie swojego przykładu, w którym dokonacie serializacji kolekcji książek.
Na koniec dość przydatny wodotrysk. Jak już pewnie zauważyliście nazwą węzła, w którym wylądowały dane jest pełną nazwą pakietową klasy Book. Ma to zarówno uzasadneinie estetyczne jak i użytecznościowe.
Zmiana nazwy węzła jest dokonywana w klasie XStream:
xStream.alias("book", Book.class);
jak widać wystarczy dodać alias do odpowiedniej klasy.
Zostały jeszcze dwa ważne aspekty do omówienia. Pierwszy dotyczy materializacji powiązań pomiędzy serializowanymi obiektami. Druga sprawa to zrozumienie sposobu działania konwerterów.