JAXB unmarshal, возвращающий нулевые значения для атрибутов - PullRequest
6 голосов
/ 03 ноября 2011

Подскажите, пожалуйста, почему мой код печатает [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;}
}

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

Я решил проблему сам.

Вам нужно написать: @XmlAttribute(name="Id") & @XmlAttribute(name="Value") над getId() и getValue() вместо @XmlAttribute. Имена идентификаторов не подобраны.

1 голос
/ 26 июля 2012

Проблема в том, что вы не следуете соглашениям об именах 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...