2011-11-03 19 views
5

Potete per favore diagnosticare il motivo per cui il mio codice stampe fuori [null, null, null, null]:JAXB unmarshal restituzione di valori nulli per gli attributi

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

ho provato il debug in Eclipse, ma i punti di interruzione ai setter e getter don' t ha colpito

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

In tal caso, è possibile inviare che come una risposta e ad accettare in diversi giorni. –

risposta

6

ho risolto il problema io stesso.

è necessario scrivere: @XmlAttribute(name="Id") & @XmlAttribute(name="Value") al di sopra del getId() e getValue() al posto di appena @XmlAttribute. I nomi degli identificatori non vengono raccolti.

1

Il problema è che non si seguono le convenzioni di denominazione Java: le variabili devono iniziare con lettere minuscole. Se è stato utilizzato i nomi delle variabili e di elementi minuscoli, che avrebbe funzionato senza elencare i nomi in modo esplicito:

@XmlAttribute 
private String id; 

public String getId() {return id;} 
public void setId(String id) {id = id;} 

e

<?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> 
Problemi correlati