首页 > 解决方案 > 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

解决方案


Corda 中的状态演变要求添加到状态的所有新字段都可以为空,因为它们可能是从没有该字段的状态的先前版本创建的,可空是针对新对象结构实例化状态的唯一逻辑选项。

例如...

data class OldState(val foo: Int)

data class NewState(val foo: Int, var bar: String? = null)

OldState从to升级NewState将映射foo到,foo因为属性相同,但会保留bar为 null,因为在之前的状态中没有任何内容可以使用不可为空的值填充该字段。


推荐阅读