2

我想将 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
) {
  ...
}

我可以使用 javap 验证生成的类确实具有公共的四参数构造函数和属性的适当 bean getter。但是,当尝试使用序列化实例时,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>

似乎注释未应用于构造函数。我该如何验证和解决这个问题?

4

1 回答 1

1

我对 XML 序列化一无所知,但也许您应该将ConstructorProperties注释应用于构造函数而不是类?

case class Foo @ConstructorProperties(Array("sequenceNumber", "nanosecondsTotal", "bytesTotal", "timeMillis"))(
  @BeanProperty sequenceNumber: Long,
  @BeanProperty nanosecondsTotal: Long,
  @BeanProperty bytesTotal: Long,
  @BeanProperty timeMillis: Long = System.currentTimeMillis
) {
  //...
}
于 2012-08-15T19:16:31.943 回答