JAXB生成的奇怪的XML结构

时间:2012-11-17 12:38:26

标签: java java-ee jaxb

为什么我会得到这种结构?我本来期待测验 - >问题 - >和两个问题元素,而不是两个问题元素?

@XmlRootElement
public class Quiz {

    private List<Question> questions;

    public Quiz() {
        questions = new ArrayList<Question>();
    }

    public List<Question> getQuestions() {
        return questions;
    }

    public void setQuestions(List<Question> questions) {
        for (Question question : questions) {
            addQuestion(question);
        }
    }

    public void addQuestion(final Question question) {
        if (!(questions.contains(question))) {
            questions.add(question);
        }
    }

    public void removeQuestion(final Question question) {
        if (questions.contains(question)) {
            questions.remove(question);
        }
    }

    public int numberOfQuestions() {
        return questions.size();
    }
}

问题:

@XmlRootElement
public class Question extends AbstractModel {

}

<quiz><questions></questions><questions></questions></quiz>

2 个答案:

答案 0 :(得分:3)

默认情况下,JAXB(JSR-222)实现不提供分组元素。您可以使用@XmlElementWrapper获取一个。

@XmlElementWrapper
@XmlElement(name="question")
public List<Question> getQuestions() {
    return questions;
}

了解更多信息

答案 1 :(得分:2)

我怀疑你的收藏(即 - “getQuestions”)没有很好地注释。
如果您打算使用Question对象列表或扩展Question的对象,则应考虑使用XmlRefElement(例如,
如果您有StudentQuestion和LecturerQuestion扩展问题,并且您希望将这些对象添加到集合中) 如果你想把“问题”的“包装”放在“问题”上,即 - 看起来像这样的XML:

<Questions>
   <Question></Question>
   <Question></Questions>
</Question>

您应该使用@XmlElementWrapper(name="Questions")

为集合添加注释