Merhabalar arkadaşlar.

Bu ve gelecek yazıda size Java’dan XML’e ve XML’den Java’ya dönüş işlemlerinde işimizi kolaylaştıran bir kütüphane olan XSTream kütüphanesinin kullanımını anlatacağım.

Bu yazının konusu Java’dan XML’e dönüşüm olacak ve bir sonraki yazıda XStream ile XML’den Java’ya dönüşüm konusunu anlatacağım.

Bu yazıdaki kodlara https://github.com/ilkgunel/XStreamDemoProject adresinden ulaşabilirsiniz.

İlk olarak https://mvnrepository.com/artifact/xstream/xstream/ adresi üzerinden XStream için Maven bağımlılık kodumuzu edinelim. Bu yazı yazılırken ki en güncel sürüm 1.2.2 sürümüdür. Dolayısı ile bağımlılık kodu da şu şekilde:

<dependency>
    <groupId>xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.2.2</version>
</dependency>

IDE’miz üzerinde bir Maven projesi açtıktan sonra yukarıdaki kodu pom.xml dosyamıza ekleyelim. Muhtemelen bu bağımlılık local Maven reponuzda bulunmadığından hemen kullanıma hazır olmayacak. NetBeans IDE üzerinde sağ tıklayıp Clean&Build deyip, Eclipse IDE üzerinde sağ tıklayıp Run As -> Main Build diyelim ve Goals kısmına clean install yazıp Run butonuna tıklayalım.

XSTream artık kullanıma hazır hale geldikten sonra şimdi com.ilkaygunel.pojo adında bir paket oluştuyorum ve içine Address ve Person adında iki sınıf oluşturuyorum.

Address.java

package com.ilkaygunel.pojo;

public class Address {
	private String district;
	private String city;

    public Address() {

	}

	public Address(String district, String city) {
		this.district = district;
		this.city = city;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getDistrict() {
		return district;
	}

	public void setDistrict(String district) {
		this.district = district;
	}

}

Address sınıfı pure Java sınıfı arkadşalar. İçerisinde alan tanımı ve onların get-set metotları dışında bir şey yok.

Person.java

package com.ilkaygunel.pojo;

public class Person {
	private String name;
	private String surname;
	private Address address;

    public Person() {
		
	}
	
	public Person(String name,String surname,Address address) {
		this.name = name;
		this.surname = surname;
		this.address = address;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname() {
		return surname;
	}

	public void setSurname(String surname) {
		this.surname = surname;
	}

	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}

}

Person sınıfımız da tıpkı Address sınıfı gibi içerisinde alanlar tutuyor ve onların get-set metotlarına sahip. Burada XML’deki iç içe alanları simgeleyecek şekilde Person sınıfı içerisinde Address sınıfından bir nesne kullandık.

Şimdi bir de com.ilkaygunel.mainclasses adında bir paket oluşturuyorum ve içerisinde SinglePersonToXML.java sınıfını oluşturuyorum. Sınıf içeriği şöyle:

SinglePersonToXML.java

package com.ilkaygunel.mainclasses;

import com.ilkaygunel.pojo.Address;
import com.ilkaygunel.pojo.Person;
import com.thoughtworks.xstream.XStream;

public class SinglePersonToXML {
	public static void main(String[] args) {
		Address address = new Address();
		address.setDistrict("Şişli");
		address.setCity("İstanbul");
		
		Person person = new Person();
		person.setName("İlkay");
		person.setSurname("Günel");
		person.setAddress(address);
		
		XStream xStream = new XStream();
		xStream.alias("person", Person.class);
		xStream.alias("address", Address.class);
		String XMLResult = xStream.toXML(person);
		
		System.out.println(XMLResult);
	}
}

SinglePersonToXML sınıfı içerisinde bir Address nesnesi oluşturduk ve akabinde bir Person nesnesi oluşturup address alanına oluşturduğumuz Address nesnesini atadık.

Akabinde bir XML çıktısı almak için kullanacağımız XSTream nesnesini oluşturduk. Oluştuduğumuz bu XSTream nesnesine XML dönüşümü sırasında kullanılacak sınıfları alias() metodu ile tanıtıyoruz. Biz burada Address ve Person sınıflarını kullandığımız için alias metodu ile person ve address alanlarını tanıtıyoruz.

Sınıfa sağ tıklayıp Run As -> Java Application dediğimizde şu şekilde bir çıktı almamız gerekir:

Ekran görüntüsünden görebileceğimiz gibi Person nesnesi başarılı bir şekilde XML’e çevirildi.

Şimdi birden fazla Person nesnesinin barındığı bir liste nasıl XML’e çevirilir ona bakalım.

Şimdi PersonList adında bir sınıf oluşturalım ve içeriği şu şekilde olsun:

PersonList.java

package com.ilkaygunel.pojo;

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

public class PersonList {
	private List<Person> list;

	public PersonList() {
		list = new ArrayList<Person>();
	}

	public void addPerson(Person p) {
		list.add(p);
	}
}

PersonList sınıfı içerinde bir liste tanımlıyoruz, yapılandırıcı içinde bu nesneyi oluşturuyoruz ve bir listeye ekleme yapan add metodumuz mevcut.

MultiplePersonToXML.java

Eldeki bir listeyi XML’e çevirecek MultiplePersonToXML sınıfımızın içeriği şu şekilde:

package com.ilkaygunel.mainclasses;

import com.ilkaygunel.pojo.Address;
import com.ilkaygunel.pojo.Person;
import com.ilkaygunel.pojo.PersonList;
import com.thoughtworks.xstream.XStream;

public class MultiplePersonToXML {
	public static void main(String[] args) {
		
		XStream xStream = new XStream();
		xStream.alias("person", Person.class);
		xStream.alias("address", Address.class);
		xStream.alias("personList", PersonList.class);
		xStream.addImplicitCollection(PersonList.class, "list");
		
		PersonList list = new PersonList();
		list.addPerson(new Person("Michael" , "Schumacher", new Address("Hürth-Hermülheim", "Germany")));
		list.addPerson(new Person("Mika" , "Hakkinen", new Address("Helsinki", "Finland")));
		list.addPerson(new Person("Fernando" , "Alonso", new Address("Oviedo", "Spain")));
		
		String XMLResult = xStream.toXML(list);
		System.out.println(XMLResult);
	}
}

Önceki örnekteki gibi XSTream nesnemizi oluşturup person ve address alias atamasını yapıyoruz. Akabinde az önce oluşturduğumuz PersonList sınıfını da aynı şekilde alias metodu ile XSTream nesnemize tanıtıyoruz. PersonList sınıfını tanıtma işleminin ardından addImplicitCollection() metodu ile PersonList sınıfı içerisindeki list nesnesini XSTream’e tanıtıyoruz. addImplicitCollection() metodu ile yapılan bu tanıtma işlemi bir PersonList nesnesi XML’e dönüşüm için geldiğinde içerisindeki list nesnesinin birden çok Person’a sahip olduğuna işaret eder ve dönüşümü de doğru şekilde yapar.

Kodun devam eden kısmında PersonList sınıfından bir nesne üretiyoruz ve nesnenin addPerson() metodu ile Person nesnelerini ekliyoruz. Son olarak da bu PersonList nesnesini toXML metoduna verip çıkan sonucu konsola yazdırıyoruz. Sınıfı çalıştırdığımızda şu şekilde bir konsol çıktımız olacak:

Bu yazıda anlatacaklarım bu kadar arkadaşlar. Gelecek yazıda da XStream ile XML’den Java’ya dönüşüm konusunu anlatacağım. Görüşene kadar sağlıcakla kalın.

Selam ve Sevgilerimle