2014-01-29 50 views
1

我有以下類:文本節點沒有解組的組合@XmlMixed + @XmlElementRefs + @XmlElementWrapper

@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

+0

我可以確認這也是'@ XmlMixed' /'@ XmlElementWrapper' /'@ XmlAnyElement'放在同一個屬性上的情況。 – studro

回答

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>(); 
}