在Corda中,调用DataVendingFlow时的NullPointerException
在Corda 3.3中,我定义了以下流程:在Corda中,调用DataVendingFlow时的NullPointerException,corda,Corda,在Corda 3.3中,我定义了以下流程: @InitiatingFlow class CollectSignaturesInitiatingFlow(val signedTransaction: SignedTransaction, val parties: List<Party>): FlowLogic<SignedTransaction>() { override fun call(): SignedTransaction { val ses
@InitiatingFlow
class CollectSignaturesInitiatingFlow(val signedTransaction: SignedTransaction, val parties: List<Party>): FlowLogic<SignedTransaction>() {
override fun call(): SignedTransaction {
val sessions = parties.map { initiateFlow(it) }
return subFlow(CollectSignaturesFlow(signedTransaction, sessions))
}
}
当我的节点执行此流时,我收到下面的异常。原因是什么
[警告]16:03:05481[节点线程-1]FlowStateMachineImpl.kt:111
流量。[55214e22-74aa-4f1b-a94d-6353d5bbf35d]。运行-由终止
意外异常{}java.lang.NullPointerException:null
位于net.corda.node.services.statemachine.FlowStateMachineImpl.suspendFlowStateMachineImpl.kt:514
~[corda-node-3.2-corda.jar:?]
net.corda.node.services.statemachine.FlowStateMachineImpl.sendInternalFlowStateMachineImpl.kt:370
~[corda-node-3.2-corda.jar:?]
net.corda.node.services.statemachine.FlowStateMachineImpl.initiateSessionFlowStateMachineImpl.kt:434
~[corda-node-3.2-corda.jar:?]
在net.corda.node.services.statemachine.FlowStateMachineImpl.sendAndReceiveFlowStateMachineImpl.kt:198
~[corda-node-3.2-corda.jar:?]
在net.corda.node.services.statemachine.FlowSessionImpl.send和ReceiveFlowSessionImpl.kt:29
~[corda-node-3.2-corda.jar:?]
在net.corda.node.services.statemachine.FlowSessionImpl.send和ReceiveFlowSessionImpl.kt:40
~[corda-node-3.2-corda.jar:?]
net.corda.core.flows.DataVendingFlow.sendPayloadAndReceiveDataRequestSendTransactionFlow.kt:70
~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.DataVendingFlow.callSendTransactionFlow.kt:48
~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.DataVendingFlow.callSendTransactionFlow.kt:31
~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.FlowLogic.subflowLogic.kt:290~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.CollectSignatureFlow.callCollectSignaturesFlow.kt:142
~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.CollectSignatureFlow.callCollectSignaturesFlow.kt:135
~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.FlowLogic.subflowLogic.kt:290~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.CollectSignaturesFlow.callCollectSignaturesFlow.kt:114
~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.CollectSignaturesFlow.callCollectSignaturesFlow.kt:64
~[corda-core-3.2-corda.jar:?]
net.corda.core.flows.FlowLogic.subflowLogic.kt:290~[corda-core-3.2-corda.jar:?]
在com.example.flow.ExampleFlowMatching$collectSignatureInitiatingflow.callExampleFlowMatching.kt:280
~[classes/:?]
在com.example.flow.ExampleFlowMatching$collectSignatureInitiatingflow.callExampleFlowMatching.kt:277
~[classes/:?]
net.corda.core.flows.FlowLogic.subflowLogic.kt:290~[corda-core-3.2-corda.jar:?]
在com.example.flow.ExampleFlowMatching$ExampleFlowMatchingInitiator.callExampleFlowMatching.kt:170
~[classes/:?]
在com.example.flow.ExampleFlowMatching$ExampleFlowMatchingInitiator.callExampleFlowMatching.kt:45
~[classes/:?]
net.corda.node.services.statemachine.FlowStateMachineImpl.runFlowStateMachineImpl.kt:96
[corda-node-3.2-corda.jar:?]
net.corda.node.services.statemachine.FlowStateMachineImpl.runFlowStateMachineImpl.kt:44
[corda-node-3.2-corda.jar:?]
在co.paralleluniverse.fibers.Fiber.run1Fiber.java:1092[quasar-core-0.7.9-jdk8.jar:0.7.9]
java:788[quasar-core-0.7.9-jdk8.jar:0.7.9]
位于co.paralleluniverse.fibers.RunnableFiberTask.doExecRunnableFiberTask.java:100
[类星体核心-0.7.9-jdk8.jar:0.7.9]
位于co.paralleluniverse.fibers.RunnableFiberTask.RunnableFiberTask.java:91
[类星体核心-0.7.9-jdk8.jar:0.7.9]
位于java.util.concurrent.Executors$RunnableAdapter.callExecutors.java:511
[?:1.8.0_191]
java:266[?:1.8.0_191]
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201ScheduledThreadPoolExecutor.java:180
[?:1.8.0_191]
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runScheduledThreadPoolExecutor.java:293
[?:1.8.0_191]
位于java.util.concurrent.ThreadPoolExecutor.runWorkerThreadPoolExecutor.java:1149
[?:1.8.0_191]
位于java.util.concurrent.ThreadPoolExecutor$Worker.runThreadPoolExecutor.java:624
[?:1.8.0_191]
在net.corda.node.utilities.AffinityExecutor$serviceffinityExecutor$1$thread$1.runAffinityExecutor.kt:62
[corda-node-3.2-corda.jar:?][WARN]16:03:05491[node-thread-1]
StateMachineManagerImpl.kt:79
流量。[55214e22-74aa-4f1b-a94d-6353d5bbf35d]。未捕获异常-已捕获
来自流{}java.lang.IllegalStateException:的异常应为
要查找当前链上的事务集,请执行以下操作:
Fiber@10000009:[55214e22-74aa-4f1b-a94d-6353d5bbf35d][任务:
纤维公司。RunnableFiberTask@4ca7589aFiber@10000009,
目标:空,计划程序:
net.corda.node.services.statemachine.StateMachineManagerImpl$FiberScheduler@599eed84]
位于net.corda.nodeapi.internal.persistence.DatabaseTransactionKt.getContextTransactionDatab
asetransation.kt:14
~[corda-node-api-3.2-corda.jar:?]
在net.corda.node.services.statemachine.FlowStateMachineImpl.rollbackTransaction$nodeFlowStateMachineImpl.kt:151
~[corda-node-3.2-corda.jar:?]
位于net.corda.node.services.StateMachineManagerImpl$initFiber$3.invokeStateMachineManagerImpl.kt:460
~[corda-node-3.2-corda.jar:?]
位于net.corda.node.services.StateMachineManagerImpl$initFiber$3.invokeStateMachineManagerImpl.kt:63
~[corda-node-3.2-corda.jar:?]
位于net.corda.node.services.statemachine.FlowStateMachineImpl.processExceptionFlowStateMachineImpl.kt:131
~[corda-node-3.2-corda.jar:?]
net.corda.node.services.statemachine.FlowStateMachineImpl.runFlowStateMachineImpl.kt:112
~[corda-node-3.2-corda.jar:?]
net.corda.node.services.statemachine.FlowStateMachineImpl.runFlowStateMachineImpl.kt:44
~[corda-node-3.2-corda.jar:?]
在co.paralleluniverse.fibers.Fiber.run1Fiber.java:1092[quasar-core-0.7.9-jdk8.jar:0.7.9]
java:788[quasar-core-0.7.9-jdk8.jar:0.7.9]
位于co.paralleluniverse.fibers.RunnableFiberTask.doExecRunnableFiberTask.java:100
[类星体核心-0.7.9-jdk8.jar:0.7.9]
位于co.paralleluniverse.fibers.RunnableFiberTask.RunnableFiberTask.java:91
[类星体核心-0.7.9-jdk8.jar:0.7.9]
位于java.util.concurrent.Executors$RunnableAdapter.callExecutors.java:511
[?:1.8.0_191]
java:266[?:1.8.0_191]
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201ScheduledThreadPoolExecutor.java:180
[?:1.8.0_191]
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runScheduledThreadPoolExecutor.java:293
[?:1.8.0_191]
位于java.util.concurrent.ThreadPoolExecutor.runWorkerThreadPoolExecutor.java:1149
[?:1.8.0_191]
位于java.util.concurrent.ThreadPoolExecutor$Worker.runThreadPoolExecutor.java:624
[?:1.8.0_191]
在net.corda.node.utilities.AffinityExecutor$serviceffinityExecutor$1$thread$1.runAffinityExecutor.kt:62
[corda-node-3.2-corda.jar:?]
从Corda 3.3开始,流中的调用方法需要用@Suspendable注释,以便检查其执行情况
因此,您应该按照以下方式重写流程:
@InitiatingFlow
class CollectSignaturesInitiatingFlow(val signedTransaction: SignedTransaction, val parties: List<Party>): FlowLogic<SignedTransaction>() {
@Suspendable
override fun call(): SignedTransaction {
val sessions = parties.map { initiateFlow(it) }
return subFlow(CollectSignaturesFlow(signedTransaction, sessions))
}
}