我正在尝试使用Corda Explorer通过RPC连接到正在运行的Corda节点。一旦我点击登录,我就会看到这个例外:
(ClientConsumerImpl.java:1122) core.client.run - AMQ214000: Failed to call onMessage
com.esotericsoftware.kryo.KryoException: Buffer underflow.
Serialization trace:
owningKey (net.corda.core.identity.Party)
value (net.corda.core.utilities.Try$Success)
at com.esotericsoftware.kryo.io.Input.require(Input.java:199) ~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.io.Input.readVarInt(Input.java:373) ~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.io.Input.readInt(Input.java:368) ~[kryo-4.0.0.jar:?]
我已经失去了几个小时的尝试各种想法,以了解问题并解决它。
我的CordaApp非常标准,在节点内加载,我可以通过命令界面启动流程。
由于堆栈跟踪源自Artemis事件处理程序,因此很少有迹象表明问题出现在应用程序级别,因此我可能会遇到如此严重的问题。
发生异常时在资源管理器中执行的代码是:
var proxy =
CordaRPCClient(
nodeHostAndPort,
CordaRPCClientConfiguration.DEFAULT.copy(
connectionMaxRetryInterval = 10.seconds
)).start(username, password).proxy
下一行会发生实际异常:
notaryIdentities = proxy.notaryIdentities()
但是,如果我删除对notaryIdentiites的调用,则会发生类似的kryo异常;这让我相信它是序列化层的一个更基本的问题?
在应用程序级别没有代码更改,因此我对可能导致此问题的原因感到十分困惑。我在这里已经阅读了其他问题和答案,这似乎表明它通常是由kyro序列化期间缓冲区管理的线程/竞争条件引起的。
但它突然开始发生的事实是如此令人困惑。
Corda团队能否为我提供一些可能的检查以帮助解决此问题?可能是某种构建/部署/依赖问题吗?
我希望今天/明天解决这个问题,以便能够在本周向管理层演示应用程序,所以非常感谢您的帮助。经过几个小时的浪费,我已经没想完了。
感谢。
答案 0 :(得分:1)
解决。 这是因为我将CordaApp作为模块添加到IntelliJ中的主要Corda项目旁边,并使用应用程序运行资源管理器。从那里运行gradle任务。从IntelliJ中删除CordaApp模块时,不会发生异常。
我怀疑它是某些java库冲突的地方。
如果有人能提出可能导致此问题的潜在冲突吗?
答案 1 :(得分:1)
Corda 3需要Guava版本19.您的CorDapp直接或间接取决于不同版本的番石榴。
当你的CorDapp加载时,它可能会随后用CorDapp的其他版本的Guava替换Guava版本19类,导致material="transparent:true; src:myImage.png"
例外。
目前没有简单的解决方案,但有一种解决方法是对您的JAR进行着色。请参阅How can CorDapps deal with transitive dependencies。
答案 2 :(得分:0)
发生了同样的问题,并将番石榴版本修复为19.0,为我修复了该问题。
添加特定的依赖项:
dependencies {
compile group: "com.google.guava", name: "guava", version: "19.0"
}