索引0 {}处缺少参数名称

时间:2018-07-26 01:50:49

标签: corda

我尝试编写一个演示-基于deliverydemobootcamp-cordapp,并参考cordapp-example以获得自己的订单流程。 通过命令“ build / nodes / runnodes”启动甲方和公证人之后:

  1. TokenIssueFlow已工作。
  2. 我可以在CLI中通过“流列表”命令查看我的订单流。 尝试启动我的订单流程时,却遇到“索引0 {}处缺少参数名称”的问题。

  

2018年7月26日星期四09:41:51 >>>流程开始   OrderPlaceFlow $ OrderPlaceRequestFlow买方:PartyB,卖方:PartyC,   售价:12.9,向下付款:0.1流量开始   OrderPlaceFlow $ OrderPlaceRequestFlow买方:PartyB,卖方:PartyC,   sellingPrice:12.9,预付款:0.1:异常:无法解析为   命令:方法lambda $ call $ 6在索引0 Thu缺少参数名称   2018年7月26日09:41:55 CST >>> E 09:41:55 + 0800 [pool-8-thread-8]   command.CRaSHSession.execute-评估请求流时出错   开始OrderPlaceFlow $ OrderPlaceRequestFlow买方:PartyB,卖方:   PartyC,销售价格:12.9,向下付款:0.1'流量开始   OrderPlaceFlow $ OrderPlaceRequestFlow买方:PartyB,卖方:PartyC,   sellingPrice:12.9,预付款:0.1:异常:无法解析为   命令:方法lambda $ call $ 6在索引0 {}处缺少参数名称   net.corda.client.jackson.StringToMethodCallParser $ UnparseableCallException $ ReflectionDataMissing:   无法解析为命令:方法lambda $ call $ 6缺少参数   在索引0处的名称   net.corda.client.jackson.StringToMethodCallParser.paramNamesFromMethod(StringToMethodCallParser.kt:131)   〜[corda-jackson-corda-3.0.jar:?]


  

2018年7月26日星期四09:38:32 >>>流程清单   com.cienet.deliverydemo.order.OrderPlaceFlow $ OrderPlaceRequestFlow   com.cienet.deliverydemo.token.TokenIssueFlow   net.corda.core.flows.ContractUpgradeFlow $ Authorise   net.corda.core.flows.ContractUpgradeFlow $ Deauthorise   net.corda.core.flows.ContractUpgradeFlow $启动

     

2018年7月26日星期四09:38:34 >>>


public OrderPlaceRequestFlow(Party buyer, Party seller, float sellingPrice, float downPayments) {
    this.buyer = buyer;
    this.seller = seller;
    this.sellingPrice = sellingPrice;
    this.downPayments = downPayments;
}

2 个答案:

答案 0 :(得分:1)

我仍然不知道为什么,但是在通过以下方法重新构建并编译后可以正常工作:

./gradlew clean
./gradlew test
./gradlew deployNodesJava -Poffline=true

答案 1 :(得分:0)

有时候,这是一个重建问题。 但是,如果您将JAVA用于流,并使用会话发送/接收/取消扭曲,则会出现此错误。而且不会发生在Kotlin代码中。

编辑:

我添加了Kotlin代码,仅用于发送/接收StateAndRef。

class TokenAsk(private val otherPartyFlow: FlowSession) {

@Suspendable
fun askTokenState(amount: Int, owner: Party): StateAndRef<TokenState> {
    otherPartyFlow.send(amount)
    otherPartyFlow.send(owner)
    return otherPartyFlow.receive<StateAndRef<TokenState>>().unwrap { it }
}

@Suspendable
fun receiveAmount(): Int =
    otherPartyFlow.receive<Int>().unwrap{it}

@Suspendable
fun receiveOwner(): Party =
        otherPartyFlow.receive<Party>().unwrap{it}

@Suspendable
fun sendStateAndRef(tokenStateAndRef: StateAndRef<TokenState>) =
    otherPartyFlow.send(tokenStateAndRef)

}

**编辑2 **

使用Kotlin代码时,我再次遇到此错误。 为了避免此错误,我必须在Flow的构造函数中删除“私有”关键字。

发件人:

class Initiator(private val number: String, private val otherParty: Party) : FlowLogic<SignedTransaction>()

收件人:

class Initiator(val number: String, val otherParty: Party) : FlowLogic<SignedTransaction>()