Отображение 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
Полезные ссылки
- Java Architecture для XML Binding - официальный учебный курс по Oracle Java
- Учебное пособие по JAXB - официальное учебное пособие по проекту JAXB (Реализованная реализация)
- Пример JAXB hello world - очень простой и легкий учебник
- Учебное пособие по JAXB - Начало работы - еще одно короткое учебное пособие с примерами
Просто Google "JAXB учебник", их множество.
Важная заметка:
JAXB - это спецификация, и существуют разные ее реализации (включая эталонную реализацию). Но эти традиционные реализации не могут использовать XPath, что печально, потому что для сильно вложенных XML-файлов использование XPath может быть гораздо более эффективным.
EclipseLink MOXy предоставляет реализацию JAXB со многими расширениями. Одним из них является отображение на основе XPath. Я нашел это чрезвычайно полезным, когда делал один из моих проектов, в которых участвовал OXM.
Вот некоторые ссылки по теме:
- XPath Based Mapping - очень полезная статья от Blaise Doughan, руководителя группы по проекту EclipseLink JAXB (MOXy). Также ознакомьтесь с другими статьями в его блоге.
- Сделайте свой JAXB чище с помощью реализации MOXy - еще одна полезная статья с хорошим примером, в котором рассказывается о преимуществах EclipseLink MOXy.
Используйте JAXB, это стандартный способ Java для привязки XML - это означает преобразование объектов в XML и обратно. Вы можете просто применить несколько аннотаций к своему классу, и это в основном все, что вам нужно сделать, чтобы избежать создания собственного пользовательского анализатора XML.