繁体   English   中英

如何从xml为jaxb创建pojo(解组)

[英]How to create a pojo from xml for jaxb ( Unmarshalling)

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

<STATUS_UPDATE>
    <UPDATES_COUNTER>2</UPDATES_COUNTER>
    <LETTERS>
        <LETTER>
            <LETTER_KEY>key1</LETTER_KEY>
            <STATUS>status1</STATUS>
        </LETTER>
        <LETTER>
            <LETTER_KEY>key2</LETTER_KEY>
            <STATUS>status2</STATUS>
        </LETTER>
    </LETTERS>
</STATUS_UPDATE>

所以我有这个XML。 我试图从中创建一个pojo。

@XmlRootElement(name = "STATUS_UPDATE")
public class StatusUpdate {

    private int updatesCounter;


    List<Letter> letters;

    public StatusUpdate(){
        letters = new ArrayList<Letter>();
    }

    public StatusUpdate(int updatesCounter, List<Letter> letters){
        super();
        this.updatesCounter = updatesCounter;
        this.letters =  letters;
    }

    @XmlElement(name="LETTERS")
    public List<Letter> getLetters() {
        return letters;
    }

    public void setLetters(List<Letter> letters) {
        this.letters = letters;
    }
    @XmlElement(name="UPDATES_COUNTER")
    public int getUpdatesCounter() {
        return updatesCounter;
    }

    public void setUpdatesCounter(int updatesCounter) {
        this.updatesCounter = updatesCounter;
    }

}

和信班

@XmlRootElement(name = "LETTER")
public class Letter {


    public Letter(){

    }

    public Letter(String letterKey,String status){
        this.letterKey = letterKey;
        this.status = status;
    }
    String letterKey;
    String status;

    @XmlElement(name="LETTER_KEY")
    public String getLetterKey() {
        return letterKey;
    }
    public void setLetterKey(String letterKey) {
        this.letterKey = letterKey;
    }
    @XmlElement(name="STATUS")
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
}

并且此代码窃听器似乎无法完成这项工作。 我没有错误,代码运行,在updateCounter变量中得到2,但我的列表为空,只有一个字母对象,两个变量均为null。

File file = new File("myFile.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(StatusUpdate.class ); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
StatusUpdate msgObject = (StatusUpdate) jaxbUnmarshaller.unmarshal(file);

我一直在阅读文档和示例,但是大多数都是为了匹配变量名和xml元素(我不想)而编写的,或者对我没有帮助。 有任何想法吗? 我有种感觉,我已经很接近目标了,但是我似乎无法把握我所缺少的。

您需要像这样向getLetters()方法添加@XmlElementWrapper(name = "LETTERS")批注

@XmlElementWrapper(name = "LETTERS")
@XmlElement(name = "LETTER")
public List<Letter> getLetters() {
    return letters;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM