Почему JavaBeans не сериализует свойство из типа List <?>? - PullRequest
1 голос
/ 17 ноября 2011

Я пытаюсь выполнить простую сериализацию 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 нет проблем с получением и настройкой свойств только для чтения.Однако, если у вас есть более элегантное решение, не стесняйтесь звонить ...

1 Ответ

0 голосов
/ 18 ноября 2011

После тестирования и отражения кажется, что мое решение является самым простым в контексте JavaBeans, просто создайте класс-оболочку ...

...