使用Postman调用Flow的API时,有效载荷无效

时间:2019-11-06 21:31:30

标签: corda

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);

1 个答案:

答案 0 :(得分:0)

我在本地节点中缺少cordapp "$accounts_release_group:accounts-contracts:$accounts_release_version"依赖项。