Шаг 131.
Язык программирования Java.
Библиотека JAXB. Сериализация простых объектов

На этом шаге мы начнем рассматривать библиотеку JAXB

Работать с xml (кто не знаком что такое xml, можно почитать тут) в java достаточно просто. Для этого в состав JDK входит библиотека JAXB (Java Architecture for XML Binding). Рассмотрим поподробней эту библиотеку.

Начнем с того что мы называем сериализацией. Сериализация это процесс преобразования объектов в поток байтов. В нашем контексте мы будем подразумевать процесс преобразования объектов в файл xml.

Сериализация в xml очень проста. Для этого нужно проделать нечто следующее:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import java.io.File;

public class Main {
    public static void main(String[] args) throws JAXBException {
        // 1
        Cat cat = new Cat("Boris", 10);

        // 2
        File outFile = new File("cat.xml");

        // 3
        JAXBContext context = JAXBContext.newInstance(Cat.class);
        // 4
        Marshaller marshaller = context.createMarshaller();
        // 5
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

        // 6
        marshaller.marshal(cat, outFile);

        System.out.println("Сериализация завершена");
    }

    // 7
    @XmlType(name = "cat")
    // 8
    @XmlRootElement
    private static class Cat {
        private String name;
        private int age;

        public Cat() {
        }

        public Cat(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

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

        public int getAge() {
            return age;
        }

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

Проект можно взять здесь


Рис. 1. Результат сериализации

Поговорим про данную программу поподробнее. В пункте 1 мы создаем объект, который будем сериализовывать. В пункте 2 определяем, в какой файл будет записан результат сериализации. В пункте 3 создается контекст. Он основывается на списке классов, которые будут участвовать в сериализации. В нашем случае это Cat.class (.class – это ссылка на класс). В пункте 4 мы создаем вспомогательный объект, через который происходит сериализация. Перед началом сериализации можно настроить параметры сериализации. Это проделано в пункте 5. Данный параметр отвечает за отформатированное отображение результата, то есть в нашем случае будут добавлены переносы строк и табуляция там, где они необходимы. В пункте 6 начинается сериализация посредством вызова функции marshal. Первым аргументом этой передается объект для сериализации, а вторым – куда будет записан результат. В нашем случае это файл.

Обратим внимание на то как оформлен класс Cat. В пункте 7 мы говорим, как будет называться тег в xml файле. В пункте 8 мы установили, что данный тег будет корневым элементом относительно xml файла. Также есть несколько правил для того, чтобы объекты класса можно было сериализовывать:

  1. У класса должен быть публичный конструктор без аргументов.
  2. Если вы хотите, чтобы поле класса сериализовывалось, то должны быть «геттер» и «сеттер» для этого поля.

На следующем шаге мы поговорим про десериализацию простых объектов

Предыдущий шаг Содержание Следующий шаг