我有以下课程:
@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并没有成功。
答案 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>();
}