Tutorial : การใช้งาน XStream

Tutorial วันนี้ สืบเนื่องจากพี่ที่ทำงานให้ศึกษา การทำงานของระบบเก่าที่มีการส่งข้อมูลผ่าน HTTP แบบที่เค้าเรียกกันว่า XML Over HTTP ซึ่งผมเองก็ไม่ได้มีความรู้ด้วยซ้ำไปว่ามันคือ อะไร แต่มี Code ส่วนหนึ่งที่ผมต้องไปแก้ไข คือการรับค่าจากทางเครื่อง Server (ซึ่งส่งมาในรูปแบบโครงสร้างของ XML) แล้วมาทำการแกะ Code ในส่วนของ XML นี่ออกมาเป็นข้อมูลเพื่อทำการบันทึกลงฐานข้อมูล หรือ นำไปใช้ประโยชน์ต่อ ซึ่งผมเห็น Code ที่เขียนแล้ว รูปแบบจะเป็นอ่าน XML มาแล้วมาใช้ jdom อ่านมาทีละ element เพื่อ Set ค่าลงไปที่ DTO หรือ Domain ก่อนที่จะส่งไปบันทึก เลยคิดว่าน่าจะมีอะไรจะ Convert โครงสร้างของ XML มาเป็น Domain และ Domain ไปเป็น XML ได้เลยตามแบบ

Domain –> XML
XML –> Domain

จากความต้องการนี้ผมก็พยายามหาจาก อ. Google ก็ได้เจอกับเจ้านี่ XStream ซึ่งในเว็บ บอกว่าว่า XStream : “XStream is a simple library to serialize objects to XML and back again” ซึ่งตรงใจผมมาก (แต่ไม่รู้จะใช้ได้จริงมั้ย) หลังจากดาวโหลดมาแล้วก็ทดลองครับ โดยสร้าง Bean หรือ Domain ขึ้นมาตัวหนึ่งดังนี้

/**
 * File Name : Employee.java
 * Created Date : Dec 3, 2009 : 10:27:23 AM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.model;

/**
 * @Author Supot Saelao
 * @Version 1.0
 */
public class Employee {
	private int code;
	private String firstName;
	private String lastName;
	private double salary;

	public Employee() {	}

	public Employee(int code, String firstName, String lastName, double salary) {
		this.code = code;
		this.firstName = firstName;
		this.lastName = lastName;
		this.salary = salary;
	}

	//Generate get & set method
}


หลังจากนั้นก็สร้าง Class ขึ้นมาเพื่อ Test ดังนี้ครับ

/**
 * File Name : TestEmployeeToXML.java
 * Created Date : Dec 3, 2009 : 10:29:12 AM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.test;

import com.fun4station.model.Employee;
import com.thoughtworks.xstream.XStream;

/**
 * @Author Supot Saelao 
 * @Version 1.0
 */
public class TestEmployeeToXML {
	public static void main(String[] args){
        //Create employee obj
        Employee emp = new Employee(1,"Supot","Saelao",5000);

        //create XStream obj
        XStream xs = new XStream();
        //set alias name for xml node
        xs.alias("empoyee", Employee.class);
        //convert Employee class to XML
        String xml = xs.toXML(emp);

        System.out.println(xml);
    }
}

จากนั้นทดลอง Run ดูจะได้ผลลัพท์ดังนี้ครับ

<empoyee>
    <code>1</code>
    <firstName>Supot</firstName>
    <lastName>Saelao</lastName>
    <salary>5000.0</salary>
</empoyee>

หรือ ถ้ามีข้อมูลที่เป็น XML String อยู่แล้วอยาก Convert ไปเป็น Domain หรือ Bean ก็เพิ่ม Code ดังนี้

/**
 * File Name : XmlToEmpoyee.java
 * Created Date : Dec 3, 2009 : 10:46:22 AM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.test;

import com.fun4station.model.Employee;
import com.thoughtworks.xstream.XStream;

/**
 * @Author Supot Saelao
 * @Version 1.0
 */
public class XmlToEmpoyee {
	public static void main(String[] args) {
		//Create XStream instant
		XStream xs = new XStream();
		//Set alias name for xml node
		xs.alias("empoyee", Employee.class);

		//Example xml string data
		StringBuffer xmlStr = new StringBuffer();
		xmlStr.append("<empoyee>");
		xmlStr.append("<code>5</code>");
		xmlStr.append("<firstName>XML Name</firstName>");
		xmlStr.append("<lastName>XML Lastname</lastName>");
		xmlStr.append("<salary>45000</salary>");
		xmlStr.append("</empoyee>");

		Employee employee = (Employee) xs.fromXML(xmlStr.toString());
		System.out.println(employee.toString());
	}
}

ผลที่จะได้จะเป็นดังนี้

Code : 5
FirstName : XML Name
LastName : XML Lastname
Salary : 45000.0

ข้อมูลจาก
เว็บไซต์
ข้อจำกัด และ ความสามารถ
Library Dependencies

  1. No comments yet.

  1. No trackbacks yet.