我已经定义了以下接口:
open class IsBustCommand(val bustParty: Party, val isBust: Boolean)
以及以下命令:
interface Commands : CommandData {
class GoToDirect(party: Party, isBust: Boolean) : IsBustCommand(party, isBust), Commands
}
运行流时,它会抛出:
java.io.NotSerializableException:构造函数参数-“ party”- 不引用“类的属性 com.cordacodeclub.directAgreement.contract.DirectAgreementContract $ Commands $ GoToDirect“ -> com.cordacodeclub.directAgreement.contract.DirectAgreementContract $ Commands $ GoToDirect类 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForType(Schema.kt:438) 〜[corda-node-api-3.3-corda.jar :?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForType $ default(Schema.kt:352) 〜[corda-node-api-3.3-corda.jar:?]
如果我将构造函数中的参数名称更改为:
class GoToDirect(bustParty: Party, isBust: Boolean) : IsBustCommand(bustParty, isBust), Commands```
然后,我不再收到例外。这是怎么回事?
答案 0 :(得分:0)
Corda序列化框架要求每个构造函数参数都对应于同名类的属性。
在第一个示例中,party
不是GoToDirect
或其超类/接口的属性,因此此条件失败了(您可以通过将val
添加到构造函数如下:class GoToDirect(val party: Party, isBust: Boolean)
。
在第二个示例中,bustParty
不是GoToDirect
的属性,而是IsBustCommand
的属性,因此满足此条件并且序列化成功。