java - java.io.NotSerializableException:-> 没有为类 java.sql.Timestamp 找到反序列化的构造函数
问题描述
具有类型成员变量的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
那么可能是什么原因呢?
解决方案
正如 Andreas 所指出的,如果一个 Java 类有多个构造函数,那么 Corda 序列化框架要求它使用@ConstructorForDeserialization
注解来指定使用哪个构造函数。
java.sql.Timestamp
不这样做。要将其用作状态中的字段,您必须提供自定义序列化程序:https ://docs.corda.net/cordapp-custom-serializers.html 。但是,我们建议尽可能使用支持的类型。
推荐阅读
- asp.net-identity - 在 Blazor 页面中使用 asp.net 角色
- postgresql - 在 postgresql 中使用 '\n' 和 ',' 拆分 textarea 记录
- javascript - 转换多维数组并重新组织数组值javascript
- c - 有没有办法将两行连接成一个语句?
- excel - 当 columnindex 使用变量时,单元格函数中的错误 1004?
- java - 写入我网站目录上的文件 - 代码正在执行但文件未更新
- python - Discord Bot 回复 DM 消息
- java - OpenCV mat put 方法无法按预期工作
- python - 复数的正则表达式
- javascript - 从服务器 MVC 重新加载 JQuery 数据表