2014-12-13 41 views
0

我看不到正確註釋我的類,使得自閉標記導致類創建空列表。換句話說,該列表在XML中根本沒有指定。解組使用空嵌套列表的自封閉標記

對於我的問題,我會參考以下兩個示例類:

@XmlRootElement(name="a") 
public class A { 
    @XmlElement 
    List<B> bs; 
} 

@XmlRootElement(name="b") 
public class B { 
    @XmlValue 
    String v; 
} 

此XML解組精細:

<a> 
    <b>One</b> 
    <b>Two</b> 
    <b>Three</b> 
</a> 

這第二個XML例子也與預期的空列表正確解組:

<a> 
    <b/> 
</a> 

然而,在第三示例導致XML不unmarsha我完全可以。

<a/> 

我想看到的,當解編的第三個例子是相同的,其中第二類被用一個空列表初始化行爲。這可能使用JAXB,還是我試圖做一些在定義的行爲面前飛行的東西?

+0

*根本不解組* * - 在哪個意義上?你沒有例外,是嗎? – lexicore 2014-12-13 11:47:56

+0

不引發JAXBException。當A是一個字段時,那個字段被設置爲空。 – CorruptedHeapScapeGoat 2014-12-13 16:22:01

回答

0

的標準方法(從XML模式生成代碼時也使用JAXB)是

@XmlRootElement(name="a") 
public class A { 
    private List<B> bs; 

    @XmlElement(name="b") 
    public List<B> getBs(){ 
     if(bs == null){ 
      bs = new ArrayList<>(); 
     } 
     return bs; 
    } 
} 

沒有setter爲bs!

+0

這與廣告一樣。只要確保顯式初始化List,或者在解組時會得到一個NullPointException。 – CorruptedHeapScapeGoat 2014-12-13 21:18:54

+0

怎麼會有NPE?如果有吸氣劑,JAXB不會訪問私人領域。 – laune 2014-12-14 05:56:25