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>