На этом шаге мы начнем рассматривать библиотеку 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 файла. Также есть несколько правил для того, чтобы объекты класса можно было сериализовывать:
На следующем шаге мы поговорим про десериализацию простых объектов