在Corda中,构造函数参数未引用属性错误

时间:2018-11-08 16:15:59

标签: corda

我已经定义了以下接口:

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```

然后,我不再收到例外。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

Corda序列化框架要求每个构造函数参数都对应于同名类的属性。

在第一个示例中,party不是GoToDirect或其超类/接口的属性,因此此条件失败了(您可以通过将val添加到构造函数如下:class GoToDirect(val party: Party, isBust: Boolean)

在第二个示例中,bustParty不是GoToDirect的属性,而是IsBustCommand的属性,因此满足此条件并且序列化成功。