JAXB 解组集合
Posted
技术标签:
【中文标题】JAXB 解组集合【英文标题】:JAXB unmarshall a collection 【发布时间】:2011-08-05 14:39:39 【问题描述】:我有一个 XML 文档:
<?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>
还有两个 POJO:
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;
我想使用 JAXB 检索 XML 节点的值。我写了这个快速代码:
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);
当我运行它时,我总是得到零值。
【问题讨论】:
【参考方案1】:你不应该在这里使用@XmlElementWrapper
,而应该使用@XmlElement
:
@XmlRootElement(name="Log")
public class Log
@XmlElement(name = "logEntry")
private List<LogEntry> logList;
【讨论】:
有关 JAXB 和集合的更多信息,请参阅:bdoughan.blogspot.com/2010/09/jaxb-collection-properties.html以上是关于JAXB 解组集合的主要内容,如果未能解决你的问题,请参考以下文章