丁度案件で使っていて知ったTIPSってことで.
・デシリアライズ時の属性のnull値の回避
リフレクションベースってことで
setterでnullガードをしていたんだけど
属性にnull値がセットされてしまった時に,
その回避方法について.
結論は単純で
readResolveメソッド
を使うと言うもの.
このメソッド自体は普通に
デシリアライズする時に
使う方法で実装するだけ.
・XML化時の謎のcomparator要素の省略
なぜか謎の<comparator>が追加されるってことで
なんだろうと思っていたものを省略する方法.
この要素,実はTreeSet/TreeMapのもので,
これを出なくするのは次のように
独自のCollectionConverterを作成して
registerすればOK.
xstream.registerConverter(
new CollectionConverter(xstream.getMapper()){
boolean canConvert(Class type) {
return type == TreeSet.class;
}
}
);
・PrittyPrintの無効化
Pritty Print,つまり人間が読みやすい方法
(インデントや改行)でXMLを出力するのを
やめる方法.
これはtoXMLの元になっているメソッド,
marshalをCompactWriterを渡して
呼び出すことで出来る.
public String xmlSerialize(Object object) {
StringWriter buffer = new StringWriter();
xstream.marshal(object, new CompactWriter(buffer));
return buffer.toString();
}