XMLEncoder/XMLDecoder によるシリアル化サポートを Scala のケース クラスに追加したいと考えています。これが私の試みです:
@ConstructorProperties(Array("sequenceNumber", "nanosecondsTotal", "bytesTotal", "timeMillis"))
final case class IoStatistics(
@BeanProperty sequenceNumber: Long,
@BeanProperty nanosecondsTotal: Long,
@BeanProperty bytesTotal: Long,
@BeanProperty timeMillis: Long = System.currentTimeMillis
) {
...
}
生成されたクラスに実際に public 4-argument コンストラクターとプロパティの適切な Bean ゲッターがあることを javap で確認できます。ただし、インスタンスをシリアル化しようとするとXMLEncoder
、次のコンソール出力が表示されます。
java.lang.InstantiationException: net.java.truevfs.ext.jmx.model.IoStatistics
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(IoStatistics);
Continuing ...
出力は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_06" class="java.beans.XMLDecoder">
</java>
コンストラクターにアノテーションが適用されていないようです。これを確認して修正するにはどうすればよいですか?