调用CordaRPCOps.startFlow时出现IllegalFlowLogicException

时间:2018-02-07 15:07:56

标签: corda

在CorDapp中,我定义了以下流程:

@InitiatingFlow
@StartableByRPC
class EchoFlow(private val msg: String): FlowLogic<String>() {
    override fun call(): String {
        return msg
    }
}

然后我将CorDapp部署到节点并尝试按如下方式运行它:

val result = proxy.startFlow { EchoFlow("msg") }.returnValue.getOrThrow()

但是,我收到了以下例外情况:

Exception in thread "main" net.corda.core.flows.IllegalFlowLogicException: 
FlowLogicRef cannot be constructed for FlowLogic of type com.template.EchoFlow due to missing constructor for arguments: []

我应该如何使用CordaRPCOps.startFlow调用流?

1 个答案:

答案 0 :(得分:1)

CordaRPCOps.startFlow用于传递流构造函数,后跟流的vararg参数。所以在Kotlin中,你可以通过运行来调用流程:

val result = proxy.startFlow(::EchoFlow, "msg").returnValue.getOrThrow()

其中::ClassName是用于获取对流的构造函数的引用的Kotlin语法。

或者,您可以使用CordaRPCOps.startFlowDynamic。此方法采用流实例,如下所示:

val result = proxy.startFlowDynamic(EchoFlow("msg")).returnValue.getOrThrow()