У меня есть следующий класс:
import org.apache.commons.beanutils.BeanUtils;
import com.thoughtworks.xstream.XStream;
...
public class MyBean {
protected static final XStream XSTREAM = new XStream(new DomDriver());
protected String name;
protected Something something;
public MyBean() {
something = new Something();
}
public MyBean(String xml) {
this();
MyBean beanFromXML = (MyBean) XSTREAM.fromXML(new StringReader(xml));
BeanUtils.copyProperties(this, beanFromXML);
}
public String toString() {
return XSTREAM.toXML(this);
}
// Getters and setters...
}
Это bean-компонент с возможностью сериализации и десериализации в / из XML с использованием XStream.
Я также добавил конструктор без аргументов, который инициализируетsomething
, чтобы избежать ошибок нулевого указателя - боб на самом деле намного сложнее, и я не хочу проверять "is something != null
?"миллион раз.
Проблема возникает, когда я использую XML-конструктор.Допустим, у меня есть следующий XML:
<myBean>
<name>John</name>
</myBean>
Это то, что я хотел бы сделать конструктором:
name: "John";
something: new Something();
Однако, поскольку в элементе нет элемента <something>
XML, BeanUtils.copyProperties составляет something = null;
, поэтому я получаю:
name: "John"
something: null
Как я могу скопировать свойства beanFromXML
в this
... но игнорируя нулевые свойства вместо перезаписиих