java.io.NotSerializableException: - >没有为类java.sql.Timestamp找到反序列化的构造函数

时间:2018-04-26 06:14:44

标签: java corda

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

那可能是什么原因?

1 个答案:

答案 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。但是,我们建议尽可能使用支持的类型。