corda - Corda - 新参数是强制性的,应该可以为空以使进化工作
问题描述
我一直在使用 Corda Enterprise 3.2 和 SQL Server 数据库运行 CorDapp。最近更新了 CorDapp,我现在看到了这个错误:
引起:java.io.NotSerializableException:net.corda.core.contracts.TransactionState -> net.corda.core.contracts.TransactionState -> data(net.corda.core.contracts.ContractState) -> invoices(java.util .Set) -> java.util.Set<com.demo.Model> -> 新参数 foo 是强制性的,应该可以为空以使进化工作
为什么升级会导致这个异常?
解决方案
Corda 中的状态演变要求添加到状态的所有新字段都可以为空,因为它们可能是从没有该字段的状态的先前版本创建的,可空是针对新对象结构实例化状态的唯一逻辑选项。
例如...
data class OldState(val foo: Int)
data class NewState(val foo: Int, var bar: String? = null)
OldState
从to升级NewState
将映射foo
到,foo
因为属性相同,但会保留bar
为 null,因为在之前的状态中没有任何内容可以使用不可为空的值填充该字段。
推荐阅读
- javascript - 如何将单元格边框添加到 SheetJS .xlsx 生成的文件?
- sql - 在cloudera中,天,小时和分钟的时间戳差异?
- vba - 在 VBA 中将图片上传到 file.io (HTTP Post)
- rest - 如何扩展 Composer REST Server
- java - 如果渲染保存 json 成功,如何刷新页面 true
- mongodb - Mongodb每隔几分钟就会崩溃一次
- c# - 从服务器下载后打印pdf文件
- php - 如何使用 jquery Ajax 验证文件类型
- javascript - 在这种情况下,为什么 sequel 对象没有 setOwner 方法?
- c++ - 如何为用 C++ 编写的 NodeJS 原生插件进行 CPU 分析?