Merhabalar,
Uzun süredir yazı yazamıyordum, bugün öğrendiğim önemli bir konuyu yazıya dökmek istedim. Bilindiği üzere, XML, veri aktarma ve depolamada kullanılabilen oldukça yararlı bir format. Bu formatı Javada nesne yönelimli programlamaya uygun olarak kullanmak için ise çeşitlli frameworkler mevcut. Bunlardan biri de Castor dur. Bu frameworkle beraber elimizde bulunan objeleri XML'e aktarıp, daha sonradan bu XML dosyasından geri objeler oluşturabileceğiz.
Castor'un resmi sayfasında hoş bir dökümantasyonu var, bu işle ilgilenecek arkadaşlara tavsiyem bunu da mutlaka okumalarıdır.
Şimdi örnek kodlarda biraz daha ayrıntıya inelim.
Projemizde iki ayrı sınıf olacak, birincisi "Person" sınıfı, kişinin ismini, işini ve favori araba markalarını tutacak, diğeri ise main fonksiyonumuzu barındıran "Main" sınıfı. Bunların yanında, projemizin çalışabilmesi için bazı jar dosyalarını projemize eklememiz gerekiyor. İsimlerini aşağıya yazıyorum, googlede aratıp indirebilirsiniz.
- castor-1.3.2-core.jar
- castor-1.3.2-xml.jar
- commons-lang-2.6.jar
- commons-logging-1.1.1.jar
- xercesImpl.jar
Şimdide kodlar:
Öncelikle mapping işlemimiz için gerekli olan mapping.xml
Burada oluşacak xml'in yapısına karar veriliyor.
mapping.xml
<?xml version="1.0"?>
<mapping>
<class name="Person">
<map-to xml="Person" />
<field name="name" type="java.lang.String">
<bind-xml name="name" node="attribute" />
</field>
<field name="dob" type="java.util.Date">
<bind-xml name="dob" node="element" />
</field>
<field name="certificates" type="java.lang.String" collection="arraylist">
<bind-xml name="certificates" node="element" />
</field>
</class>
</mapping>
Person.java
import java.util.ArrayList;
public class Person {
public Person(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public ArrayList<String> getFavorites() {
return favorites;
}
public void setFavorites(ArrayList<String> favorites) {
this.favorites = favorites;
}
private String name;
private String job;
private ArrayList<String> favorites;
public Person(String name,String job,ArrayList<String> favorites){
this.name = name;
this.job = job;
this.favorites = favorites;
}
/**
* @return the String representation of the Person
*/
public String toString(){
return "Name: "+this.getName()+"\nJob: "+this.getJob()+"\nFavorites:"+this.getFavorites();
}
}
Main.java
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
public class Main {
/**
* @param args
* @throws MappingException
* @throws IOException
* @throws ValidationException
* @throws MarshalException
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) throws IOException, MappingException, MarshalException, ValidationException {
// TODO Auto-generated method stub
ArrayList<String> favorites1 = new ArrayList<String>();
ArrayList<String> favorites2 = new ArrayList<String>();
ArrayList<String> favorites3 = new ArrayList<String>();
favorites1.add("Audi");
favorites2.add("BMW");
favorites2.add("Mercedes");
favorites3.add("VW");
favorites3.add("Ford");
favorites3.add("Audi");
ArrayList<Person> personList = new ArrayList<Person>();
personList.add(new Person("Ahmet","Engineer",favorites1));
personList.add(new Person("Mehmet","Doctor",favorites2));
personList.add(new Person("Celil","Teacher",favorites3));
// mapping.xml dosyası tanımlaması
final String MAPPING_FILE = "file:///home/gozenem/workspace/mycastor/mapping.xml";
// Mapping oluşturma
Mapping mapping = new Mapping();
mapping.loadMapping(MAPPING_FILE);
// -------- Marshalling Başlangıcı --------
// mashhal için Writer oluşturma
FileWriter writer = new FileWriter("test.xml");
// formatlama için Serializer oluşturma
OutputFormat format = new OutputFormat();
format.setIndenting(true);
format.setIndent(4);
XMLSerializer serializer = new XMLSerializer(writer, format);
// Marshaller oluşturma
Marshaller marshaller = new Marshaller();
marshaller.setMapping(mapping);
marshaller.setSuppressXSIType(true);
marshaller.setWriter(writer);
marshaller.setDocumentHandler(serializer.asDocumentHandler());
// person objesini marshalla
marshaller.marshal(personList);
// -------- Marshalling bitti --------
// -------- Unmarshalling Başlangıcı --------
// unmarshalling için reader oluşturma
ArrayList<Person> personList2 = new ArrayList<Person>();
FileReader reader = new FileReader("test.xml");
// Unmarshaller oluşturma
Unmarshaller unmarshaller = new Unmarshaller(ArrayList.class);
unmarshaller.setMapping(mapping);
personList2 = (ArrayList<Person>) unmarshaller.unmarshal(reader);
// -------- Unmarshalling Bitti --------
// Bilgileri ekrana yazdırma
for (int i = 0; i < 3; i++) {
System.out.println(personList2.get(i).toString());
}
}
}
Bu yazıdaki büyük katkısı için Murat Sayılgan arkadaşıma teşekkür ederim. Kolay gelsin.
Hiç yorum yok:
Yorum Gönder