GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java Core Java I/O Hướng dẫn chuyển đổi Java Object sang XML và XML sang Java Object sử dụng Java JAXB

Hướng dẫn chuyển đổi Java Object sang XML và XML sang Java Object sử dụng Java JAXB

Đăng vào 30/12/2017 . Được đăng bởi GP Coder . 11369 Lượt xem . Toàn màn hình

Trong bài viết Kết hợp Java Reflection và Annotation tôi đã hướng dẫn các bạn tự viết một chức năng chuyển đổi Java Object sang XML. Trong bài này, tôi sẽ hướng dẫn các bạn sử dụng JAXB để chuyển đổi đối tượng Java Object thành Xml và ngược lại.

JAXB là viết tắt của Java Architecture for XML Binding, JAXB được tích hợp vào JDK bắt đầu từ phiên bản 6.0. JAXB cung cấp phương thức để ghi (marshal) đối tượng java sang XML và đọc (unmarshal) XML thành đối tượng java.

Một số Annotation được sử dụng trong JAXB:

  • XmlRootElement: là một Annotation, sử dụng để đánh dấu phần tử gốc (root element) của một tài liệu xml.
  • XmlAccessorType: là một Annotation, sử dụng để thông báo với JAXB rằng các trường hoặc thuộc tính sẽ được sử dụng. Các loại XmlAccessType:
    • PUBLIC_MEMBER : là loại AccessType mặc định của Jaxb. Nó sẽ binding các phần tử là public fields, properties, hoặc được đánh dấu xml annotations.
    • PROPERTY : Nó sẽ binding các phần tử được đánh dấu xml annotations hoặc properties.
    • FIELD : Nó sẽ binding các phần tử được đánh dấu xml annotations hoặc fields.
    • NONE : Nó sẽ binding các phần tử được đánh dấu xml annotations.
  • XmlElementWrapper: là một Annotation sử dụng để đánh dấu đây là một phần cha và giá trị của nó là một Collection (có chứa tài liệu xml con).
  • XmlElement: là một Annotation, sử dụng để đánh dấu đây là một phần tử của tài liệu xml.
  • XmlAttribute: là một Annotation, sử dụng để đánh dấu đây là một thuộc tính của phần tử.
  • XmlTransient: là một Annotation, sử dụng để đánh dấu thuộc tính này sẽ được bỏ qua, không nằm trong tài liệu xml.
  • XmlType(propOrder={fieldNames}) : là một Annotation, sử dụng để đánh dấu thứ tự các field trong tài liệu xml.

Nội dung

  • 1 JAXB Marshalling: chuyển object sang xml
  • 2 JAXB UnMarshalling: chuyển xml sang object

JAXB Marshalling: chuyển object sang xml

Employee.java


package com.gpcoder.xml.jaxb;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlRootElement(name = "employee")
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee {

	@XmlAttribute(name = "id")
	private int id;

	@XmlElement(name = "name")
	private String name;

	@XmlElement(name = "salary")
	private float salary;

	@XmlTransient
	private int age;

	/**
	 * Bắt buộc phải có hàm khởi tạo không tham số
	 */
	public Employee() {
	}

	public Employee(int id, String name, float salary, int age) {
		super();
		this.id = id;
		this.name = name;
		this.salary = salary;
		this.age = age;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Employee [id=" + id + ", name=" + name + ", salary=" + salary + ", age=" + age + "]";
	}
}

Department.java


package com.gpcoder.xml.jaxb;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(namespace = "http://gpcoder.com/jaxb")
@XmlAccessorType(XmlAccessType.FIELD)
public class Department {

	@XmlElement(name = "no")
	private String deptNo;
	
	@XmlElement(name = "name")
	private String deptName;

	@XmlElementWrapper(name = "employees")
	@XmlElement(name = "employee")
	private List<Employee> employees;

	/**
	 * Bắt buộc phải có hàm khởi tạo không tham số
	 */
	public Department() {

	}

	public Department(String deptNo, String deptName) {
		this.deptNo = deptNo;
		this.deptName = deptName;
	}

	public String getDeptNo() {
		return deptNo;
	}

	public void setDeptNo(String deptNo) {
		this.deptNo = deptNo;
	}

	public String getDeptName() {
		return deptName;
	}

	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}

	public List<Employee> getEmployees() {
		return employees;
	}

	public void setEmployees(List<Employee> employees) {
		this.employees = employees;
	}

	@Override
	public String toString() {
		return "Department [deptNo=" + deptNo + ", deptName=" + deptName + ", employees=" + employees + "]";
	}

}

ObjectToXml.java


package com.gpcoder.xml.jaxb;

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class ObjectToXml {

	public static void main(String[] args) throws Exception {

		JAXBContext contextObj = JAXBContext.newInstance(Department.class);

		Marshaller marshallerObj = contextObj.createMarshaller();
		marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
		
		Department dept = getDepartment();
		
		// Write data to console
		marshallerObj.marshal(dept, System.out);
		
		// Write data to file xml
		marshallerObj.marshal(dept, new FileOutputStream("department.xml"));
	}

	private static Department getDepartment() {
		// Create employees
		List<Employee> employees = new ArrayList<>();
		Employee emp1 = new Employee(1, "GP Coder", 1000, 28);
		Employee emp2 = new Employee(2, "LN Devil", 700, 27);
		employees.add(emp1);
		employees.add(emp2);

		// Create department
		Department department = new Department("D01", "IT Support");
		department.setEmployees(employees);
		return department;
	}
}

Thực thi chương trình trên, nội dung console như bên dưới và một file department.xml được tạo ra.


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:department xmlns:ns2="http://gpcoder.com/jaxb">
    <no>D01</no>
    <name>IT Support</name>
    <employees>
        <employee id="1">
            <name>GP Coder</name>
            <salary>1000.0</salary>
        </employee>
        <employee id="2">
            <name>LN Devil</name>
            <salary>700.0</salary>
        </employee>
    </employees>
</ns2:department>

Giải thích hoạt động của chương trình trên như sau:

JAXB UnMarshalling: chuyển xml sang object


package com.gpcoder.xml.jaxb;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class XMLToObject {

	public static void main(String[] args) {

		try {
			File file = new File("department.xml");
			JAXBContext jaxbContext = JAXBContext.newInstance(Department.class);

			Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
			Department dept = (Department) jaxbUnmarshaller.unmarshal(file);
			System.out.println(dept);

		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
}

Kết quả thực thi chương trình trên:


Department [deptNo=D01, deptName=IT Support, 
	employees=[
		Employee [id=1, name=GP Coder, salary=1000.0, age=0], 
		Employee [id=2, name=LN Devil, salary=700.0, age=0]
	]
]

Tài liệu tham khảo:

  • https://docs.oracle.com/javase/tutorial/jaxb/intro/
  • https://docs.oracle.com/javase/8/docs/technotes/guides/xml/jaxb/index.html
  • https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Unmarshaller.Listener.html
  • http://blog.bdoughan.com/
5.0
09
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Java I/O, Report Được gắn thẻ: jaxb, Report, xml

Hướng dẫn xuất dữ liệu ra file word, pdf với xDocReport
Hướng dẫn phân tích nội dung HTML sử dụng thư viện Jsoup

Có thể bạn muốn xem:

  • Giới thiệu WatchService API trong Java (30/07/2018)
  • Đọc ghi file CSV trong Java (18/12/2017)
  • Hướng dẫn sử dụng luồng vào ra ký tự trong Java (13/12/2017)
  • Hướng dẫn sử dụng lớp Console trong java (15/12/2017)
  • Thao tác với tập tin và thư mục trong Java (14/12/2017)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (98061 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97702 lượt xem)
  • Giới thiệu Design Patterns (87770 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (86441 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83840 lượt xem)

Nội dung bài viết

  • 1 JAXB Marshalling: chuyển object sang xml
  • 2 JAXB UnMarshalling: chuyển xml sang object

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link