Я пытаюсь выполнить простую сериализацию XML с JavaBeans, с объектом, имеющим пять свойств getter / setter и два getter.Эти два типа List <...>:
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 нет проблем с получением и настройкой свойств только для чтения.Однако, если у вас есть более элегантное решение, не стесняйтесь звонить ...