调用CordaRPCOps.startFlow时发生IllegalFlowLogicException
在一个CorDapp中,我定义了以下流程:
@InitiatingFlow @StartableByRPC class EchoFlow(private val msg: String): FlowLogic() { 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
调用流?
CordaRPCOps.startFlow
通过传递一个流构造函数来使用, CordaRPCOps.startFlow
是流的参数variables。 所以在Kotlin中,你可以通过运行来调用流程:
val result = proxy.startFlow(::EchoFlow, "msg").returnValue.getOrThrow()
Where ::ClassName
是获取对流的构造函数的引用的Kotlin语法。
或者,您可以使用CordaRPCOps.startFlowDynamic
。 这个方法取一个流程实例,如下所示:
val result = proxy.startFlowDynamic(EchoFlow("msg")).returnValue.getOrThrow()