Элементы XML <agency>
, <company>
и <channel>
имеют довольно сложную структуру вложенности.
Поэтому слишком просто моделировать их как свойства Java String
.
Вместо этого вам нужен отдельный класс POJO для них.
Поскольку 3 имеют одинаковую структуру, мы можем использовать общий класс для всех них.
Не имея лучшего названия, назовем этот класс Ìtem
.
Обратите внимание, что все 3 свойства помечены @XmlElement
.
@XmlRootElement(name = "CURRENT_VALUES")
@XmlAccessorType(XmlAccessType.FIELD)
public class EventoModel
{
@XmlElement
private Item agency;
@XmlElement
private Item company;
@XmlElement
private Item channel;
// public getters and setters (omitted here for brevity)
}
Класс Item
может выглядеть следующим образом.
Он содержит свойство с именем value
, моделирующее элемент XML <value>
.
Обратите внимание, свойство помечается @XmlElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Item {
@XmlElement
private Value value;
// public getters and setters (omitted here for brevity)
}
Элемент XML <value>
все еще довольно сложен.
Поэтому нам нужен еще один класс POJO для его моделирования. Давайте назовем класс Value
.
Текст XML между <value ...>
и </value>
моделируется свойством
String text
, который должен быть аннотирован @XmlValue
.
Атрибут XML xsi:type="..."
моделируется свойством
String type
, который должен быть аннотирован @XmlAttribute
.
Обратите особое внимание на параметр namespace
, который соответствует пространству имен XML
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
.
@XmlAccessorType(XmlAccessType.FIELD)
public class Value {
@XmlAttribute(namespace = "http://www.w3.org/2001/XMLSchema-instance")
private String type;
@XmlValue
private String text;
// public getters and setters (omitted here for brevity)
}
Снимок экрана ниже (взятый из отладчика) визуализирует все
Java структура и подтверждает, что unmarshalling работает правильно:
