2011-11-17 62 views
1

我想用JavaBeans做一些簡單的XML序列化,一個對象有五個getter/setter屬性和兩個getter。這兩個是從類型列表< ...>:爲什麼JavaBean不能從類型列表<?>序列化一個屬性?

public List<MasterDataQueryMDType> getType() { 
    if (type == null) { 
     type = new ArrayList<MasterDataQueryMDType>(); 
    } 
    return this.type; 
} 

public List<MasterDataQueryKey> getKey() { 
    if (key == null) { 
     key = new ArrayList<MasterDataQueryKey>(); 
    } 
    return this.key; 
} 

我然後使用XMLEncoder類(雖然這裏JAXB可能更合適,但我保持它現在簡單)。生成的XML只有五個getter/setter屬性,List類型的兩個屬性尚未編碼。是因爲它們是隻讀的,還是必須爲這些通用列表編寫一個PersistenceDelegate?


好吧,我已經研究較多,而最簡單的方法來解決這個沒有去狂寫自己的PersistenceDelegate似乎是一個包裝類的創建:

public class MasterDataQueryWrapper { 
private MasterDataQuery query; 

public MasterDataQuery getQuery(){ 
    return this.query; 
} 
public void setQuery(MasterDataQuery value){ 
    this.query = value; 
} 
public List<MasterDataQueryMDType> getType(){ 
    return query.getType(); 
} 
public void setType(List<MasterDataQueryMDType> value){ 
    for (MasterDataQueryMDType t:value){ 
     this.query.getType().add(t); 
    } 
} 
public List<MasterDataQueryKey> getKey(){ 
    return query.getKey(); 
} 
public void setKey(List<MasterDataQueryKey> value){ 
    for (MasterDataQueryKey k:value){ 
     this.query.getKey().add(k); 
    } 
} 
} 

這樣,JAVA Beans在獲取和設置只讀屬性方面沒有問題。但是,如果你有一個更好的解決方案,隨意附和......

+0

但是編碼器拋出了一些小錯誤:java.lang.NullPointerException 繼續... java.lang.InstantiationException:java.math.BigDecimal 繼續... java.lang.RuntimeException:未能評估: = Class.new(); 繼續... java.lang.InstantiationException:java.math.BigDecimal 繼續... java.lang.RuntimeException:未能評估: = Class.new(); 繼續... –

+0

您是否知道,接口List本身不能擴展可序列化?你的問題能否在那裏發生?另外:是'MasterDataQueryMDType'可序列化? – Jonathan

+0

是的,'MasterDataQueryMDType'是可序列化的,但是這裏的問題似乎是原始類中的屬性'getKey'和'getText'是隻讀的,這不符合javaBeans。在這種情況下,XMLEncoder簡單地忽略這些屬性。通過我的解決方案,我提供了一個包裝類,它只是爲這兩個屬性添加一個setter,然後所有東西都被序列化。 –

回答

0

測試和反思之後,似乎我的解決辦法是JavaBean中的情況下最簡單的,只需要創建一個包裝類...

相關問題