Сопоставление 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.


person Waqas Ali    schedule 25.05.2013    source источник


Ответы (2)


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

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

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

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

ПРИМЕЧАНИЕ.
Вы можете проверить, какая версия JAXB установлена ​​в вашем JDK, с помощью xjc (компилятор привязки) в комплекте с JDK: xjc -version


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

Просто погуглите "JAXB tutorial", их масса.


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

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

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

Вот несколько связанных ссылок:

person informatik01    schedule 26.05.2013

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

person Petr Mensik    schedule 25.05.2013