加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JAXB unmarshall一个集合

发布时间:2020-12-14 05:23:17 所属栏目:Java 来源:网络整理
导读:我有一个 XML文档: ?xml version="1.0" encoding="UTF-8"?Log logEntry severityWARN/severity dateTime2011-03-17 15:25/dateTime messageHere is the text from the application/message class(class name)/class program TB Reception/program /logEntry
我有一个 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);


    }
}

当我运行它时,我总是获得零值.

解决方法

你不应该在这里使用@XmlElementWrapper,只是@XmlElement:
@XmlRootElement(name="Log")
public class Log {
    @XmlElement(name = "logEntry")
    private List<LogEntry> logList;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读