Примеры использования JAXB

JAXB расшифровывается как Java Architecture for XML Binding. Это технология, которая позволяет при помощи специальных аннотаций преобразовывать Java объекты в XML документы и обратно. В данном руководстве мы покажем, как использовать JAXB для выполнения операций:

  • Marshalling — преобразование Java объекта в XML файл;
  • Unmarshalling — преобразование XML файла в Java объект.

Работать с JAXB довольно просто: достаточно проаннотировать свои классы нужными аннотациями, а потом с помощью методов jaxbMarshaller.marshall() и jaxbMarshaller.unmarshall() преобразовать свои объекты в XML документы и наоборот соответственно.


Начиная с версии 1.6 JAXB входит в стандартную поставку Java, поэтому никаких дополнительных библиотек подключать не требуется. Если вы используете Java версии меньше 1.6, то для работы вам потребуется скачать библиотеку с официального сайта проекта и подключить ее к своему проекту самостоятельно.

Аннотации JAXB

Классы, объекты которых вы хотите преобразовывать в XML файлы должны быть помечены специальными аннотациями JAXB. Имена этих аннотаций говорят сами за себя, объясняя разработчику, какую функциональность они добавляют классам. Однако, если вас интересует подробное описание всех аннотаций JAXB, то вы можете найти исчерпывающую информацию в официальном руководстве на сайте проекта.

package ru.j4web.examples.java.xml;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Customer {
    
    private String name;
    private int age;
    private int id;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public int getId() {
        return id;
    }

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

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

Marshalling: Преобразование Java объектов в XML документ

Для преобразования Java объекта в XML документ применяется метод Marshaller.marshal(). В классе Marshaller присутствует много перегруженных методов marshal() для использования с разными типами объектов вывода информации.

package ru.j4web.examples.java.xml;

import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class JAXBExample {

    public static void main(String[] args) {
        Customer customer = new Customer();
        customer.setId(1);
        customer.setName("Иван Иванов");
        customer.setAge(28);

        try {
            File file = new File(System.getProperty("user.dir")
                    + File.separator + "customer.xml");
            JAXBContext context = JAXBContext.newInstance(Customer.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(customer, file);
            marshaller.marshal(customer, System.out);
        } catch (JAXBException ex) {
            Logger.getLogger(JAXBExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        }
    }
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="1">
    <age>28</age>
    <name>Иван Иванов</name>
</customer>

Unmarshalling: Преобразование XML документа в Java объект

Теперь настало время выполнить обратную операцию: преобразовать XML файл, полученный на предыдущем шаге в Java объект. Это делается с помощью метода Unmarshaller.unmarshal(). Следует отметить, что в классе Unmarshaller есть много перегруженных методов unmarshal(), которые решают большинство распространенных случаев использования.

package ru.j4web.examples.java.xml;

import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
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 {
            File file = new File(System.getProperty("user.dir")
                    + File.separator + "customer.xml");
            JAXBContext context = JAXBContext.newInstance(Customer.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            Customer customer = (Customer) unmarshaller.unmarshal(file);
            System.out.println(customer);
        } catch (JAXBException ex) {
            Logger.getLogger(JAXBExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        }
    }
}
Customer [name=Иван Иванов, id=1, age=28]

Полезная информация

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*