我有以下课程:
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...
}
它是一个能够使用 XStream 对 XML 进行序列化和反序列化的 bean。
我还添加了一个初始化的非参数构造函数something
,以避免空指针错误 - bean 实际上要复杂得多,我不想检查“是something != null
吗?” 一百万次。
当我使用 XML 构造函数时,问题就出现了。假设我有以下 XML:
<myBean>
<name>John</name>
</myBean>
这就是我希望构造函数做的事情:
name: "John";
something: new Something();
但是,由于 XML 中没有<something>
元素,因此 BeanUtils.copyProperties 生成something = null;
,因此我得到的是:
name: "John"
something: null
如何将beanFromXML
的属性复制到this
... 但忽略空属性而不是覆盖它们?