在Corda升级后运行测试时,错误obj.javaClass.`package`

时间:2019-03-28 07:01:06

标签: java unit-testing corda

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

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不能为空

1 个答案:

答案 0 :(得分:0)

这是当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日实现的提交,handleObject(obj:Any?)方法试图在packageName属性中获取一个名为'name'的属性,但'name'属性为null。