【问题标题】:Error obj.javaClass.`package` when running tests after corda upgrade升级 Corda 后运行测试时出错 obj.javaClass.`package`
【发布时间】:2019-08-18 21:12:31
【问题描述】:

我刚刚从 corda 3.3 升级到 4.0,然后我的所有合同和流程测试开始失败。这些在我定义事务(事务构建器对象,添加输出和输入状态时)的那些行中失败了。

ledger(ledgerServices, l -> {
    l.transaction(tx -> {
        tx.input(fooContract.foo_CONTRACT_ID, fooContractState);
        tx.command(Arrays.asList(node1.getPublicKey(),   
                   node2.getPublicKey()), 
                   new fooContract.Commands.dummyCommand()); 
        // Correct type.
        return tx.verifies();
    }
}

我收到以下错误:

obj.javaClass.package 不能为空

【问题讨论】:

    标签: java unit-testing corda


    【解决方案1】:

    这是一个问题,当 TransactionBuilder 试图在事务中查找 StatePointer 并且包名称为 null 时(查找包的逻辑错误,因为它正在考虑并调用其来源为 null 的东西) .提醒您,StatePointer 仅发布 Corda Platform Open Source 4.0。 我建议您将您的 CorDapp 升级到 Corda 4.1 版本,因为它已于 2019 年 3 月 7 日修复并且仅在 Corda 4.1 中发布。

    你的日志应该是这样记录的:

    obj.javaClass.package 不能为空
    java.lang.IllegalStateException: obj.javaClass.package 不能为空
    在 net.corda.core.internal.StatePointerSearch.handleObject(StatePointerSearch.kt:75)
    在 net.corda.core.internal.StatePointerSearch.handleField(StatePointerSearch.kt:85)
    在 net.corda.core.internal.StatePointerSearch.search(StatePointerSearch.kt:92)
    在 net.corda.core.transactions.TransactionBuilder.resolveStatePointers(TransactionBuilder.kt:494)
    在 net.corda.core.transactions.TransactionBuilder.addOutputState(TransactionBuilder.kt:568)

    更多信息: https://github.com/corda/corda/commits/release/4.1/core/src/main/kotlin/net/corda/core/internal/StatePointerSearch.kt

    查看 2019 年 3 月 7 日实现的 commit,handleObject(obj: Any?) 方法试图在 packageName 属性中获取一个名为 'name' 的属性,但 'name' 属性为空。

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2018-05-04
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 2018-12-24
      • 2020-07-21
      • 2018-08-30
      相关资源
      最近更新 更多