Corda OS 4.3-RC01
我有一个发送String
参数的启动流;在响应流中,它查询其保险库以获取具有AccountInfo
属性和接收值的name
,并返回一个List
及其结果。
当我运行流测试时,这很好用,但是当我在本地运行节点并运行Web服务器,然后使用Postman调用API时,出现以下错误:
java.lang.IllegalArgumentException: Payload invalid
at net.corda.core.internal.InternalUtils.checkPayloadIs(InternalUtils.kt:531) ~[corda-core-4.3-RC01.jar:?]
at net.corda.node.services.statemachine.FlowSessionImpl.sendAndReceive(FlowSessionImpl.kt:56) ~[corda-node-4.3-RC01.jar:?]
因此,当我检查引起问题的方法(InternalUtils.checkPayloadIs()
)时,我注意到在运行流测试时(不会引发该错误);反序列化的类型是net.corda.core.flows.NotarizationPayload
,而当我用Postman调用流时,反序列化的类型是:java.util.List
。
启动流程
List result = hostSession.sendAndReceive(List.class, name).unwrap(it -> it);
响应流
String name = otherPartySession.receive(String.class).unwrap(it -> it);
List accounts = getServiceHub()
.cordaService(KeyManagementBackedAccountService.class).accountInfo(name);
StateAndRef<AccountInfo> accountStateAndRef = (StateAndRef<AccountInfo>)accounts.stream()
.filter(acc -> ((StateAndRef<AccountInfo>)acc).getState().getData().getHost()
.equals(getOurIdentity()))
.findAny()
.orElse(null);
List result = new ArrayList();
if (accountStateAndRef != null)
result.add(accountStateAndRef);
otherPartySession.send(result);
答案 0 :(得分:0)
我在本地节点中缺少cordapp "$accounts_release_group:accounts-contracts:$accounts_release_version"
依赖项。