JAXB là từ viết tắt của chữ Java Architecture for XML Binding, nó là một thư viện sử dụng các annotation để chuyển đổi các đối tượng Java sang các nội dung XML và ngược lại. Trong bài viết này, mình sẽ hướng dẫn các bạn chuyển đổi nội dung tập tin XML sang đối tượng Java sử dụng JAXB.
Mình sẽ bắt đầu với một project như sau:
Chúng ta có tập tin XML với nội dung đơn giản như sau:
1 2 3 4 5 6 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <student> <name>John</name> <code>12345</code> <age>19</age> </student> |
Và một lớp Student sẽ được định nghĩa sử dụng các JAXB annotation như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
package com.huongdanjava.jaxb; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Student { private String name; private String age; private String code; public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public String getAge() { return age; } @XmlElement public void setAge(String age) { this.age = age; } public String getCode() { return code; } @XmlElement public void setCode(String code) { this.code = code; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", code=" + code + "]"; } } |
Với JAXB, chúng ta thường dùng 2 hai annotation cơ bản, đó là:
- @XmlRootElement: annotation này chỉ rõ thẻ ngoài cùng nhất của tập tin XML là gì và do đó nó được khai báo trên đầu của một lớp.
- @XmlElement: dùng để khai báo một thuộc tính của đối tượng là một thẻ của tập tin XML.
Trong ví dụ trên, bên trong thẻ student, chúng ta có 3 thẻ là name, age và code. Do đó, đối tượng Student của chúng ta phải khai báo annotation cho 3 thuộc tính tương ứng.
OK, bây giờ chúng ta sẽ tiến hành chuyển đổi nội dung XML các bạn nhé!
Đầu tiên, chúng ta sẽ khởi tạo đối tượng JAXBContext với đối tượng cần chuyển đổi là Student.
1 |
JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); |
Trong đối tượng JAXBContext này, nó có một phương thức để tạo ra đối tượng dùng để chuyển đổi nội dung XML sang đối tượng Java đó là Unmarshaller. Cụ thể như sau:
1 |
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); |
Và giờ các bạn có thể sử dụng phương thức unmarshal() trong đối tượng Unmarshaller cho mục đích của chúng ta rồi.
Có nhiều phương thức overloaded unmarshal() nhưng trong bài viết này chúng ta đang làm việc với tập tin nên mình sẽ tạo đối tượng File và truyền vào cho phương thức unmarshal().
1 2 3 |
File file = new File("student.xml"); Student student = (Student) jaxbUnmarshaller.unmarshal(file); System.out.println(student); |
Kết quả;
Toàn bộ code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.huongdanjava.jaxb; import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; public class JAXBExample { public static void main(String[] args) { try { JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); File file = new File("student.xml"); Student student = (Student) jaxbUnmarshaller.unmarshal(file); System.out.println(student); } catch (JAXBException e) { e.printStackTrace(); } } } |
anh le
Cảm ơn anh Khanh, bài viết hay quá.