2011-04-14 9 views
10

Tengo un documento XML:JAXB Resolver referencia una colección

<?xml version="1.0" encoding="UTF-8"?> 

<Log> 
    <logEntry> 
     <severity>WARN</severity> 
     <dateTime>2011-03-17 15:25</dateTime> 
     <message>Here is the text from the application</message> 
     <class>(class name)</class> 
     <program> TB Reception</program> 
    </logEntry> 

    <logEntry> 
     <severity>WARN</severity> 
     <dateTime>2011-03-17 15:25</dateTime> 
     <message>Here is the text from the application</message> 
     <class>(class name)</class> 
     <program> TB Reception</program> 
    </logEntry> 
</Log> 

y dos POJOs:

package org.jwes.jaxb.jax; 

import java.util.ArrayList; 
import java.util.List; 

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlElementWrapper; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name="Log") 
public class Log { 
    @XmlElementWrapper(name = "logEntry") 
    private List<LogEntry> logList; 

    public List<LogEntry> getLogEntries() { 
     return logList; 
    } 

    public void setLogEntries(List<LogEntry> logList) { 
     this.logList = logList; 
    } 


} 

package org.jwes.jaxb.jax; 

import java.io.Serializable; 

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlElementWrapper; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlRootElement(name="LogEntry") 
public class LogEntry{ 


    private String source; 
    private String message; 
    private String severity; 
    private String program; 
    private String className; 


    public String getSource() { 
     return source; 
    } 
    public void setSource(String source) { 
     this.source = source; 
    } 
    public String getMessage() { 
     return message; 
    } 
    public void setMessage(String message) { 
     this.message = message; 
    } 
    public String getSeverity() { 
     return severity; 
    } 
    public void setSeverity(String severity) { 
     this.severity = severity; 
    } 
    public String getProgram() { 
     return program; 
    } 
    public void setProgram(String program) { 
     this.program = program; 
    } 
    @XmlElement(name = "class") 
    public String getClassName() { 
     return className; 
    } 
    public void setClassName(String className) { 
     this.className = className; 
    } 
} 

me gustaría recuperar los valores de los nodos XML utilizando JAXB. Escribí este código rápido:

public class App 
{ 
    public static void main(String[] args) throws JAXBException, IOException 
    { 
     JAXBContext jc = JAXBContext.newInstance(Log.class); 

     Unmarshaller um = jc.createUnmarshaller(); 
     Log logElement=(Log)um.unmarshal(new FileReader("src/main/resources/log.xml")); 
     System.out.println(logElement.getLogEntries().toArray().length); 


    } 
} 

Cuando lo ejecuto, siempre obtengo el valor de cero.

Respuesta

9

No se debe utilizar @XmlElementWrapper aquí, sólo @XmlElement:

@XmlRootElement(name="Log") 
public class Log { 
    @XmlElement(name = "logEntry") 
    private List<LogEntry> logList; 
+0

Gracias @skaffman que funcionó como un encanto !! – jwesonga

+2

Para obtener más información sobre JAXB y colecciones, consulte: http://bdoughan.blogspot.com/2010/09/jaxb-collection-properties.html –

Cuestiones relacionadas