【Java】【XML】XStreamの重箱の隅 | さすらいびとの徒然漂流記

さすらいびとの徒然漂流記

ふらふら漂流するさすらいびとのように,色々な話題についてお気楽極楽,徒然なるままに…

丁度案件で使っていて知った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();

}