Arkadaşlar Merhaba,
Staj yaptığım yer olan Kartaca Bilişimde Castor frameworkunu incelemeye devam ediyorum halen. Bugün karşılaştığım ve çözmek için baya uğraştığım bir durumu yazacağım. Daha önceki yazımda Castor ile XML marshalling ve unmarshalling operasyonlarının nasıl yapıldığını yazmıştım. O yazıda bu işlemleri mapping.xml adında bir dosya ile gerçekleştiriyordum. Bu dosya, Castor'a XML i nasıl parçalayacağı hakkında bilgi veriyordu. Ancak bazen büyük projelerde mevcut dosyaların içine yeni bir tane XML dosyası eklemek istenilmeyen birşey olabiliyor. Böyle bir durum için, XML dosyası olmadan nasıl yapılabilir bu işler onu araştırdım.
Aslında parçalayacağımız XML dosyasında 1 tane kayıt varsa işimiz kolay, fakat burada 1den fazla kayıt olduğu durumlarda marshalling işleminde XMLe bilgileri kaydederken hiyerarşi icabı başına ekstra tag koyarak kaydediyor. Yani şunun gibi,
<anonymous-tag>
<person>...</person>
<person>...</person>
</anonymous-tag>
Bu durumda da bu XMLi unmarshal ederken problem çıkıyor. Bunu, person listemizi ayrı bir sınıfa koyarak çözüyoruz.Yazılanlar havada kalmış olabilir, o yüzden kodlara geçelim.
Person.Java
import java.util.Date;
public class Person{
private String name = null;
private Date dob = null;
public Person() {
super();
}
public Person(String name) {
this.setName(name);
}
public Person(String name, Date dob) {
this.setName(name);
this.setDob(dob);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setDob(Date dob) {
this.dob = dob;
}
public Date getDob() {
return dob;
}
public String toString(){
return "Name: "+this.getName()+"\nDate of Birth: "+this.getDob();
}
}
PersonList.Java
public class PersonList {
public PersonList(int number) {
super();
this.person = new Person[number];
}
public PersonList() {
super();
}
private Person[] person;
public Person[] getPerson() {
return person;
}
public void setPerson(Person[] person) {
this.person = person;
}
}
Main.Java
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
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;
import org.exolab.castor.xml.XMLContext;
public class Main {
@SuppressWarnings("deprecation")
public static void main(String[] args) throws IOException,
MappingException, MarshalException, ValidationException {
// Yeni Person objesi
Person person = new Person("Emre Gözen");
person.setDob(new Date(1999, 06, 29, 12, 20));
// Yeni Person objesi
Person person2 = new Person("Emre Gözen1234564");
person2.setDob(new Date(1999, 06, 29, 12, 20));
PersonList personList = new PersonList(2);
personList.getPerson()[0]=person;
personList.getPerson()[1]=person2;
// Marshalling için Writer objesi
FileWriter writer = new FileWriter("test.xml");
XMLContext context = new XMLContext();
// Marshaller objesi
Marshaller marshaller = context.createMarshaller();
marshaller.setWriter(writer);
marshaller.setSuppressXSIType(true);
// Marshalling işlemi
marshaller.marshal(personList);
// Unmarshalling için Reader
FileReader reader = new FileReader("test.xml");
XMLContext context2 = new XMLContext();
// Unmarshaller objesi
Unmarshaller unmarshaller =
context2.createUnmarshaller();
unmarshaller.setClass(PersonList.class);
// Unmarshalling işlemi
PersonList personList2 = (PersonList) unmarshaller.unmarshal(reader);
// Sonucu ekrana yazdırma
for (int i = 0; i < 2; i++) {
System.out.println(personList2.getPerson()[i].getName() + "\n\n");
}
}
}
Takıldığınız yer olursa beraber inceleyebiliriz. Şimdilik bu kadar.
Herkese iyi günler.
Hiç yorum yok:
Yorum Gönder