In Corda, `KryoException: Encountered unregistered class ID` despite registering classes

谁都会走 提交于 2019-12-13 04:42:57

问题


I have written an application that uses a Spring Boot webserver to speak to a Corda node.

I have whitelisted all the required classes, but when I start a flow on the node, I get the following exception:

[WARN ] 2018-05-31T01:52:17,723Z [Thread-0 (ActiveMQ-client-global-threads)] messaging.RPCServer.clientArtemisMessageHandler - Inbound RPC failed {actor_id=user1, actor_owningIdentity=O=Book, L=Shanghai, C=CN, actor_store_id=NODE_CONFIG, invocation_id=a1d3ad59-fb5c-4037-897e-a5c19d1d281e, invocation_timestamp=2018-05-31T01:52:17.723Z, session_id=9595bff5-3982-4a76-967a-85f2b88f5347, session_timestamp=2018-05-31T01:46:55.130Z}
com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 109
    at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:137) ~[kryo-4.0.0.jar:?]
    at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:693) ~[kryo-4.0.0.jar:?]
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:804) ~[kryo-4.0.0.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.DefaultKryoCustomizer$NonEmptySetSerializer.read(DefaultKryoCustomizer.kt:181) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.DefaultKryoCustomizer$NonEmptySetSerializer.read(DefaultKryoCustomizer.kt:169) ~[corda-node-api-3.1-corda.jar:?]
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813) ~[kryo-4.0.0.jar:?]
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134) ~[kryo-4.0.0.jar:?]
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40) ~[kryo-4.0.0.jar:?]
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813) ~[kryo-4.0.0.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(KryoSerializationScheme.kt:97) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(KryoSerializationScheme.kt:37) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.withContext(KryoSerializationScheme.kt:80) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.access$withContext(KryoSerializationScheme.kt:37) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1.execute(KryoSerializationScheme.kt:95) ~[corda-node-api-3.1-corda.jar:?]
    at com.esotericsoftware.kryo.pool.KryoPoolQueueImpl.run(KryoPoolQueueImpl.java:61) ~[kryo-4.0.0.jar:?]
    at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.deserialize(KryoSerializationScheme.kt:94) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:111) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) ~[corda-core-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:111) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:86) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80) ~[corda-core-3.1-corda.jar:?]
    at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize(SerializationScheme.kt:111) ~[corda-node-api-3.1-corda.jar:?]
    at net.corda.node.services.messaging.RPCServer.clientArtemisMessageHandler(RPCServer.kt:570) [corda-node-3.1-corda.jar:?]
    at net.corda.node.services.messaging.RPCServer.access$clientArtemisMessageHandler(RPCServer.kt:79) [corda-node-3.1-corda.jar:?]
    at net.corda.node.services.messaging.RPCServer$createRpcConsumer$1.invoke(RPCServer.kt:196) [corda-node-3.1-corda.jar:?]
    at net.corda.node.services.messaging.RPCServer$createRpcConsumer$1.invoke(RPCServer.kt:79) [corda-node-3.1-corda.jar:?]
    at net.corda.node.services.messaging.RPCServerKt$sam$MessageHandler$5b9bfc45.onMessage(RPCServer.kt) [corda-node-3.1-corda.jar:?]
    at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:997) [artemis-core-client-2.2.0.jar:2.2.0]
    at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:49) [artemis-core-client-2.2.0.jar:2.2.0]
    at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1120) [artemis-core-client-2.2.0.jar:2.2.0]
    at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) [artemis-commons-2.2.0.jar:2.2.0]
    at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) [artemis-commons-2.2.0.jar:2.2.0]
    at org.apache.activemq.artemis.utils.actors.ProcessorBase$ExecutorTask.run(ProcessorBase.java:53) [artemis-commons-2.2.0.jar:2.2.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_161]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_161]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_161]

What is the cause of this error?


回答1:


This is caused by a classpath conflict. Corda 3.1 uses Guava 21.0, whereas the CorDapp in question was using Guava 22.0.

After downgrading the version of Guava used by the CorDapp to Guava 21.0, this issue was resolved.



来源:https://stackoverflow.com/questions/50639058/in-corda-kryoexception-encountered-unregistered-class-id-despite-registering

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!