Corda-新参数是必需的,应该可以为null,以便evolution工作

Corda-新参数是必需的,应该可以为null,以便evolution工作,corda,Corda,我一直在使用Corda Enterprise 3.2和SQL Server数据库运行CorDapp。最近更新了CorDapp后,我发现以下错误: 原因:java.io.NotSerializableException: net.corda.core.contracts.TransactionState-> net.corda.core.contracts.TransactionState-> 数据(net.corda.core.contracts.ContractState)-> 发票(java

我一直在使用Corda Enterprise 3.2和SQL Server数据库运行CorDapp。最近更新了CorDapp后,我发现以下错误:

原因:java.io.NotSerializableException: net.corda.core.contracts.TransactionState-> net.corda.core.contracts.TransactionState-> 数据(net.corda.core.contracts.ContractState)-> 发票(java.util.Set)->java.util.Set->New 参数foo是必需的,应该可以为Null,以便evolution工作


升级为什么会导致此异常?

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

例如

data class OldState(val foo: Int)

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

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

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

例如

data class OldState(val foo: Int)

data class NewState(val foo: Int, var bar: String? = null)
OldState
升级到
NewState
会将
foo
映射到
foo
,因为属性相同,但会将
bar
保留为null,因为在以前的状态中没有任何内容可以用不可为null的值填充该字段