Collateral
状态类,其中java.sql.Timestamp
类型的成员变量在版本3.1-corda
中反序列化时抛出异常:
java.io.NotSerializableException: net.corda.core.contracts.TransactionState -> data(net.corda.core.contracts.ContractState) -> No constructor for deserialization found for class java.sql.Timestamp. -> class java.sql.Timestamp -> class com.syne.cordapp.state.Collateral
java.sql.Timestamp
类已经是白名单的一部分,实现为:
class CordaSerializationWhitelist : SerializationWhitelist {
override val whitelist: List<Class<*>>
get() = listOf(Timestamp::class.java, HashSet::class.java, Set::class.java)
}
此类还添加到文件 - META-INF/services/net.corda.core.serialization.SerializationWhitelist
那可能是什么原因?
答案 0 :(得分:3)
正如Andreas所指出的,如果Java类有几个构造函数,Corda序列化框架要求它使用{ Error: Parse Error
at Socket.socketOnData
at emitOne
at Socket.emit
// ...
}
注释指定要使用的构造函数。
@ConstructorForDeserialization
不会这样做。要将其用作州内的字段,您必须提供自定义序列化程序:https://docs.corda.net/cordapp-custom-serializers.html。但是,我们建议尽可能使用支持的类型。