Archiwum dla październik 3rd, 2006

03
paź
06

przysposobienie obronne

jak to zrobić, żeby się nie narobić. kobiety generalnie są za równouprownieniem. tylko, że to równo ma być na ich warunkach. ale to tak tylko mimochodem. jak poradzić sobie z aferą śmietnikową?

w moim prywatnym świecie panuje mniej więcej równy podział obowiązków. mniej więcej bo nijak wychodzi mi przekonanie moich cudownych lokatorek, że śmieci nie rozpływają się w powietrzu.

najpierw był podział, poźniej prośby. ostatnio błagania i groźby. no ale nic z tego. również eksperyment pod tytułem jak pojemny jest kubeł na śmieci nie zadziałał. niedość , że pod zlewem usypała się niezła górka, to nie ma raczej widoków na jej tajemnicze usunięcie.

ostatnio edyta wyszła z inicjatywą. “w kuble nie ma już miejsca więc nowy śmietnik jest w worku pod krzesłem” – niedosłownie cytując.

z poważaniem

ja ;)

03
paź
06

XStream

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.