我刚刚从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
不能为空
答案 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)
考虑到2019年3月7日实现的提交,handleObject(obj:Any?)方法试图在packageName属性中获取一个名为'name'的属性,但'name'属性为null。