IllegalFlowLogicException при вызове CordaRPCOps.startFlow
В 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 ответ
Решение
CordaRPCOps.startFlow
используется путем передачи конструктора потока, после которого в поток передается множество аргументов. Итак, в Kotlin вы бы вызвали поток, выполнив:
val result = proxy.startFlow(::EchoFlow, "msg").returnValue.getOrThrow()
куда ::ClassName
синтаксис Kotlin для получения ссылки на конструктор потока
В качестве альтернативы, вы можете использовать CordaRPCOps.startFlowDynamic
, Этот метод использует экземпляр потока, как показано ниже:
val result = proxy.startFlowDynamic(EchoFlow("msg")).returnValue.getOrThrow()