13 Mayıs 2011 Cuma

XStream ile XML Serileştirme (XML Serialization)

Java'daki serileştirme (serialization) desteğine alternatif olarak kullanılabilecek bir yöntem XML serileştirme (XML serialization) yöntemidir. Bu metod ile Java işletim ortamınızdaki nesne örneklerini (instance) XML formuna çevirebilir veya tam tersini (XML formundan tekrar işletim ortamına nesne örneği olarak yükleme) yapabiliriz. XStream (http://xstream.codehaus.org/) bu işi kolayca yapabilmemizi sağlayan bir kütüphane.

Aşağıda XStream kullanımı örneklenmiştir.
package x.y.z;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class XStreamTester {

  public static class Person {
    private String name;
    private Date birthDate = new Date();

    public Person(String name) {
      this.name = name;
    }

    @Override
    public String toString() {
      return String.format("%s,%s", name, birthDate);
    }
  }

  public static class Author extends Person {
    private List<Book> books = new ArrayList<Book>();

    public Author(String name) {
      super(name);
    }

    public List<Book> getBooks() {
      return books;
    }

    @Override
    public String toString() {
      return String.format("%s,%s", super.toString(), books);
    }
  }

  public static class Book {
    private String name;
    private Author author;

    public Book(String name, Author author) {
      this.name = name;
      this.author = author;
    }

    @Override
    public String toString() {
      return String.format("%s", name);
    }
  }

  public static void main(String[] args) {
    Author author1 = new Author("author1");
    author1.getBooks().add(new Book("book1", author1));
    author1.getBooks().add(new Book("book2", author1));
    author1.getBooks().add(new Book("book3", author1));

    XStream xstream = new XStream(new DomDriver());
    xstream.alias("Book", Book.class);            // XML icinde sinifi tanimlayan etiket olarak verdigimiz isim kullanilir
    xstream.omitField(Person.class, "birthDate"); // Verilen alan serilestirmeye sokulmaz

    String xml = xstream.toXML(author1);
    System.out.printf("%s\n\n", xml);

    System.out.printf("before : %s\n", author1);

    Object object = xstream.fromXML(xml);
    System.out.printf("after  : %s\n", object);
  }
}
Bu kod çalışınca aşağıdaki çıktı alınacaktır:
<x.y.z.XStreamTester_-Author>
  <name>author1</name>
  <books>
    <Book>
      <name>book1</name>
      <author reference="../../.."/>
    </Book>
    <Book>
      <name>book2</name>
      <author reference="../../.."/>
    </Book>
    <Book>
      <name>book3</name>
      <author reference="../../.."/>
    </Book>
  </books>
</x.y.z.XStreamTester_-Author>

before : author1,Fri May 13 22:14:19 EEST 2011,[book1, book2, book3]
after  : author1,null,[book1, book2, book3]
Linkler:

1 yorum:

Devrim Baris Acar dedi ki...

Castor JDO de bu konuda basarili kutuphanelerdendir.