2011-11-03 81 views
5

能否請您診斷爲什麼我的代碼打印出[NULL,NULL,NULL,NULL]:JAXB解組返回空值的屬性

Unmarshaller m = JAXBContext.newInstance(Roles.class).createUnmarshaller(); 
Roles root = m.ummarshal(new FileReader("test.xml")); 
System.out.println(root); 

我試圖在getter和setter方法不要在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;} 
} 
+0

在這種情況下,你可以發佈,作爲一個答案,並接受數天。 –

回答

6

我解決了自己的問題。

你需要寫:@XmlAttribute(name="Id") & @XmlAttribute(name="Value")getId()getValue()以上地方只是@XmlAttribute。標識符名稱未被拾取。

1

問題是您沒有遵循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>