#java #xml #annotations #jaxb
#java #xml #аннотации #jaxb
Вопрос:
Кажется, что JAXB игнорирует @XmlAttribute
аннотацию и не заполняет attributeName
attributeValue
атрибуты и . Не могли бы вы помочь мне решить эту проблему?
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Product>
<ProductCode>PRD191_5</ProductCode>
<AttrList>
<element Name="Toy Type" Value="Quadrocopter"/>
<element Name="Engine Type" Value="Electric Engine"/>
<element Name="Build Type" Value="Ready-To-Fly"/>
</AttrList>
</Product>
Классы Java:
@XmlRootElement(name = "Product")
@XmlAccessorType(XmlAccessType.FIELD)
public class Product {
@XmlElement(name = "ProductCode")
private String productCode;
@XmlElement(name = "AttrList")
private List<Attribute> attrList = null;
}
@XmlRootElement(name = "element")
@XmlAccessorType(XmlAccessType.FIELD)
public class Attribute {
@XmlElement(name="element")
@Column
private String element;
@XmlAttribute(name = "Name", required=true)
@Column
private String attributeName;
@XmlAttribute(name = "Value", required=true)
@Column
private String attributeValue;
}
Зависимость от Maven:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
Ответ №1:
В определении вашей модели есть некоторые ошибки: @XmlElement
attrList
для атрибута должно быть установлено значение element
(элемент, который повторяется), в то время как имя элемента-оболочки <AttrList>
должно передаваться вместе с @XmlElementWrapper
аннотацией:
@XmlRootElement(name = "Product")
@XmlAccessorType(XmlAccessType.FIELD)
public class Product {
@XmlElement(name = "ProductCode")
private String productCode;
@XmlElementWrapper(name = "AttrList")
@XmlElement(name = "element")
private List<Attribute> attrList = null;
}
Вам также следует удалить свойство Java Bean Attribute#element
, поскольку оно будет обозначать подэлемент с именем <element>
<element>
тега.