2011-11-03 23 views
5

bạn có thể vui lòng chẩn đoán tại sao mã của tôi in ra [null, null, null, null]:JAXB unmarshal trở về giá trị null cho các thuộc tính

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

tôi đã cố gắng gỡ lỗi trong nhật thực nhưng breakpoint tại setters và thu khí don' t nhấn

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

Trong trường hợp đó, bạn có thể đăng bài mà như một câu trả lời và chấp nhận trong vài ngày. –

Trả lời

6

tôi giải quyết vấn đề bản thân mình.

Bạn cần phải viết: @XmlAttribute(name="Id") & @XmlAttribute(name="Value") trên getId()getValue() ở vị trí của chỉ @XmlAttribute. Tên nhận dạng không được chọn.

1

Vấn đề là bạn không tuân theo quy ước đặt tên Java: biến cần phải bắt đầu bằng chữ thường. Nếu bạn sử dụng biến và yếu tố thường tên, nó sẽ làm việc mà không cần liệt kê tên một cách rõ ràng:

@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> 
Các vấn đề liên quan