#java #xml #jaxb
#java #xml #jaxb
Вопрос:
Не могли бы вы определить, почему мой код выводит [null, null, null, null]:
Unmarshaller m = JAXBContext.newInstance(Roles.class).createUnmarshaller();
Roles root = m.ummarshal(new FileReader("test.xml"));
System.out.println(root);
Я пробовал отладку в eclipse, но точки останова в установщиках и получателях не попадают
test.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Roles>
<Ele Id="1" Value="Yes"/>
<Ele Id="2" Value="Yes"/>
<Ele Id="3" Value="No"/>
<Ele Id="4" Value="Yes"/>
</Roles>
Roles.java
@XmlRootElement(name="Roles")
public class Roles {
private List<Ele> EleList;
public Roles() {super();}
@XmlElement(name="Ele")
public List<Ele> getEleList() {return EleList;}
public void setEleList(List<Ele> EleList) {this.EleList = EleList;}
public String toString() {return EleList.toString();}
}
Ele.java
public class Ele {
@XmlAttribute
private String Id;
@XmlAttribute
private String Value;
public Ele(){super();}
public String getId() {return Id;}
public void setId(String id) {Id = id;}
public String getValue() {return Value;}
public void setValue(String value) {Value = value;}
public String toString() { if(Id == null || Value == null) return null; else return Id Value;}
}
Комментарии:
1. В этом случае вы можете опубликовать это как ответ и принять через несколько дней.
Ответ №1:
Я решил проблему сам.
Вам нужно написать: @XmlAttribute(name="Id")
amp; @XmlAttribute(name="Value")
над getId()
и getValue()
вместо just @XmlAttribute
. Имена идентификаторов не распознаются.
Ответ №2:
Проблема в том, что вы не соблюдаете соглашения об именовании Java: переменные должны начинаться со строчной буквы. Если бы вы использовали имена переменных и элементов в нижнем регистре, это работало бы без явного перечисления имен:
@XmlAttribute
private String id;
public String getId() {return id;}
public void setId(String id) {id = id;}
и
<?xml version="1.0" encoding="UTF-8" ?>
<Roles>
<Ele id="1" value="Yes"/>
<Ele id="2" value="Yes"/>
<Ele id="3" value="No"/>
<Ele id="4" value="Yes"/>
</Roles>