Отображение XML на объект в Java

Предположим, у меня есть класс с именем Test, например

public class Test {

    private String testId;
    private String description;
    private String department;

    public Test() {}

    public Test(String id,String des,String dpt) {
        this.testId = id;
        this.department = dpt;
        this.description = des;
    }

    public String getTestId() {
        return testId;
    }

    public void setTestId(String testId) {
        this.testId = testId;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

}


Также XML-строка, которая содержит данные для объекта класса Test. XML строка

<test>
    <testId>1</testId>
    <description>This is first test</description>
    <department>surgeon</department>
</test>


Теперь моя задача - проанализировать эту строку XML и создать объект класса Test и поместить все данные, содержащиеся в этом XML, в этот объект. Я использую JDOM для разбора XML. Я хочу знать, есть ли какое-либо решение, посредством которого все данные в формате XML напрямую копируются в объект Test?

Теперь я делаю это следующим образом: я анализирую строку XML и получаю данные каждого узла один за другим, а затем вызываю метод setter, чтобы установить данные для каждого поля объекта класса Test.

2 ответа

Решение

Краткий ответ: да, такое решение есть.

Это называется " привязка данных XML ", или, альтернативно, " O / X Mapping " (Object / XML Mapping) или " OXM ". Преобразование XML-документа в объект называется unmarshalling.
Преобразование (сериализация) объекта в документ XML называется маршаллингом.

НОТА:
Термины маршаллинг и демаршаллинг относятся НЕ ТОЛЬКО к объекту / XML и наоборот к преобразованию. Читайте здесь: Marshalling (Информатика).

Собственное решение Java называется Java Architecture для привязки XML (JAXB). Это спецификация, описанная в JSR 222. JDK включает в себя реализацию JAXB, поэтому вам (как правило) не нужно загружать отдельную эталонную реализацию (RI) с домашней страницы проекта JAXB.

НОТА:
Вы можете проверить, какая версия JAXB у вашего JDK, используя xjc (компилятор связывания), связанный с JDK: xjc -version


Полезные ссылки

Просто Google "JAXB учебник", их множество.


Важная заметка:

JAXB - это спецификация, и существуют разные ее реализации (включая эталонную реализацию). Но эти традиционные реализации не могут использовать XPath, что печально, потому что для сильно вложенных XML-файлов использование XPath может быть гораздо более эффективным.

EclipseLink MOXy предоставляет реализацию JAXB со многими расширениями. Одним из них является отображение на основе XPath. Я нашел это чрезвычайно полезным, когда делал один из моих проектов, в которых участвовал OXM.

Вот некоторые ссылки по теме:

Используйте JAXB, это стандартный способ Java для привязки XML - это означает преобразование объектов в XML и обратно. Вы можете просто применить несколько аннотаций к своему классу, и это в основном все, что вам нужно сделать, чтобы избежать создания собственного пользовательского анализатора XML.

Другие вопросы по тегам