组合@XmlMixed + @XmlElementRefs + @XmlElementWrapper的文本节点不会被解组

时间:2014-01-29 22:44:30

标签: jaxb

我有以下课程:

@XmlRootElement(name = "any-text")
public class AnyText {

    @XmlElementWrapper(name = "fixed-text", required = true)
    @XmlElementRefs({
        @XmlElementRef(name = "year", namespace = "http://foo.org/", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "title", namespace = "http://foo.org/", type = JAXBElement.class, required = false)
    })
    @XmlMixed
    protected List<Serializable> fixedText = new ArrayList<Serializable>();
...

应该代表以下XML:

<any-text xmlns="http://foo.org/">
    <fixed-text>The story <title>Alice in Wonderland</title> was printed in <year>1865</year>.</fixed-text>
</any-text>

然而,当我解组并编组这个XML时,我得到了这个:

<any-text xmlns="http://foo.org/">
    <fixed-text>
        <title>Alice in Wonderland</title>
        <year>1865</year>
    </fixed-text>
</any-text>

基本上所有文本节点都消失了。我检查了内存模型,发现它们没有被解组。当我尝试以编程方式添加文本节点并对模型进行编组时,文本节点仍然不会出现。任何解决方法都表示赞赏。

我正在使用JAXB v2.2.4,但我也测试了v2.2.8并没有成功。

此问题与描述here的问题非常相似(可能相同),我也将其报告为JAXB-1107

1 个答案:

答案 0 :(得分:2)

这似乎是JAXB实现中的一个错误。

解决方法是将JAXB实体类拆分为两个。

@XmlRootElement(name = "any-text")
public class AnyText {

    @XmlElement(name = "fixed-text", required = true)
    protected FixedText fixedText;

...
}

public class FixedText {
    @XmlElementRefs({
        @XmlElementRef(
            name = "year", 
            namespace = "http://foo.org/", 
            type = JAXBElement.class, 
            required = false),
        @XmlElementRef(
            name = "title", 
            namespace = "http://foo.org/", 
            type = JAXBElement.class, 
            required = false)
    })
    @XmlMixed
    protected List<Serializable> fixedText = new ArrayList<Serializable>();
}
相关问题