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在獲取和設置只讀屬性方面沒有問題。但是,如果你有一個更好的解決方案,隨意附和......
但是編碼器拋出了一些小錯誤: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(); 繼續... –
您是否知道,接口List本身不能擴展可序列化?你的問題能否在那裏發生?另外:是'MasterDataQueryMDType'可序列化? – Jonathan
是的,'MasterDataQueryMDType'是可序列化的,但是這裏的問題似乎是原始類中的屬性'getKey'和'getText'是隻讀的,這不符合javaBeans。在這種情況下,XMLEncoder簡單地忽略這些屬性。通過我的解決方案,我提供了一個包裝類,它只是爲這兩個屬性添加一個setter,然後所有東西都被序列化。 –