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()
Другие вопросы по тегам