Jaxb 对于@XmlMixed+@xmlementrefs+@XmlElementWrapper

Jaxb 对于@XmlMixed+@xmlementrefs+@XmlElementWrapper,jaxb,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, requi

我有以下课程:

@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>();
...
@XmlRootElement(name=“任意文本”)
公共类AnyText{
@XmlElementWrapper(name=“fixed text”,required=true)
@XmlElementRefs({
@xmlementref(name=“year”,名称空间=”http://foo.org/,type=JAXBElement.class,required=false),
@XmlElementRef(name=“title”,命名空间=”http://foo.org/,type=JAXBElement.class,必需=false)
})
@混合
受保护列表fixedText=新ArrayList();
...
它应该表示以下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>

,我也将其报告为。

这似乎是JAXB实现中的一个bug

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

@XmlRootElement(name=“任意文本”)
公共类AnyText{
@XmlElement(name=“fixed text”,必需=true)
受保护的固定文本固定文本;
...
}
公共类固定文本{
@XmlElementRefs({
@xmlementref(
name=“年”,
名称空间=”http://foo.org/", 
type=JAXBElement.class,
必需=错误),
@xmlementref(
name=“title”,
名称空间=”http://foo.org/", 
type=JAXBElement.class,
必需=错误)
})
@混合
受保护列表fixedText=新ArrayList();
}

我可以确认,当
@XmlMixed
/
@xmlementwrapper
/
@xmlanyement
放置在同一属性上时,情况也是如此。
<any-text xmlns="http://foo.org/">
    <fixed-text>
        <title>Alice in Wonderland</title>
        <year>1865</year>
    </fixed-text>
</any-text>