私は次のクラスを持っています:
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 です。
null ポインター エラーを回避するために、を初期化する非引数コンストラクターも追加しました。実際には、Bean はもっと複雑で、「is ?」something
をチェックしたくありません。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
ですか?ただし、null プロパティを上書きするのではなく無視しますか?