В Corda `KryoException: обнаружен незарегистрированный идентификатор класса` несмотря на регистрацию классов - PullRequest
0 голосов
/ 01 июня 2018

Я написал приложение, которое использует веб-сервер Spring Boot для связи с узлом Corda.

Я внес в белый список все необходимые классы, но когда я запускаю поток на узле, я получаю следующее исключение:

[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]

В чем причина этой ошибки?

1 Ответ

0 голосов
/ 01 июня 2018

Это вызвано конфликтом путей к классам.Corda 3.1 использует Guava 21.0, тогда как рассматриваемый CorDapp использовал Guava 22.0.

После понижения версии Guava, используемой CorDapp, до Guava 21.0, эта проблема была решена.

...