如何在Corda 3.3 RPC客户端中修复“ com.esotericsoftware.kryo.KryoException:java.lang.ClassCastException”

时间:2019-01-24 18:37:48

标签: client rpc corda

我正在使用CordaRPCClient作为Corde Node的中间件来构建Spring Boot Web服务器。从节点查询当前时间可以正常工作。但是在打电话时

  

设置matchingParties =   CordaClient.getInstance()。proxy.partiesFromName(“ PartyB”,false);

我正在获取以下堆栈跟踪:

com.esotericsoftware.kryo.KryoException: java.lang.ClassCastException: org.bouncycastle.asn1.DLSequence cannot be cast to org.bouncycastle.asn1.ASN1Integer
    Serialization trace:
    owningKey (net.corda.core.identity.Party)
    value (net.corda.core.utilities.Try$Success)
            at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.read(CompatibleFieldSerializer.java:147) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.read(CompatibleFieldSerializer.java:147) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813) ~[kryo-4.0.0.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(KryoSerializationScheme.kt:97) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(KryoSerializationScheme.kt:37) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.withContext(KryoSerializationScheme.kt:80) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.access$withContext(KryoSerializationScheme.kt:37) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1.execute(KryoSerializationScheme.kt:95) ~[corda-node-api-3.3-corda.jar!/:na]
            at com.esotericsoftware.kryo.pool.KryoPoolQueueImpl.run(KryoPoolQueueImpl.java:61) ~[kryo-4.0.0.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.deserialize(KryoSerializationScheme.kt:94) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:111) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) ~[corda-core-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:111) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:86) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80) ~[corda-core-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize(SerializationScheme.kt:111) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.RPCApi$ServerToClient$Companion.fromClientMessage(RPCApi.kt:360) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.client.rpc.internal.RPCClientProxyHandler.artemisMessageHandler(RPCClientProxyHandler.kt:268) ~[corda-rpc-3.3-corda.jar!/:na]
            at net.corda.client.rpc.internal.RPCClientProxyHandler.access$artemisMessageHandler(RPCClientProxyHandler.kt:71) ~[corda-rpc-3.3-corda.jar!/:na]
            at net.corda.client.rpc.internal.RPCClientProxyHandler$start$3.invoke(RPCClientProxyHandler.kt:206) ~[corda-rpc-3.3-corda.jar!/:na]
            at net.corda.client.rpc.internal.RPCClientProxyHandler$start$3.invoke(RPCClientProxyHandler.kt:71) ~[corda-rpc-3.3-corda.jar!/:na]
            at net.corda.client.rpc.internal.RPCClientProxyHandlerKt$sam$MessageHandler$26468063.onMessage(RPCClientProxyHandler.kt) ~[corda-rpc-3.3-corda.jar!/:na]
            at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1003) ~[artemis-core-client-2.4.0.jar!/:2.4.0]
            at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:50) ~[artemis-core-client-2.4.0.jar!/:2.4.0]
            at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1126) ~[artemis-core-client-2.4.0.jar!/:2.4.0]
            at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) [artemis-commons-2.4.0.jar!/:2.4.0]
            at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) [artemis-commons-2.4.0.jar!/:2.4.0]
            at org.apache.activemq.artemis.utils.actors.ProcessorBase$ExecutorTask.run(ProcessorBase.java:53) [artemis-commons-2.4.0.jar!/:2.4.0]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_201]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_201]
            at java.lang.Thread.run(Unknown Source) [na:1.8.0_201]
    Caused by: java.lang.ClassCastException: org.bouncycastle.asn1.DLSequence cannot be cast to org.bouncycastle.asn1.ASN1Integer
            at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.<init>(Unknown Source) ~[bcprov-jdk15on-1.57.jar!/:1.57.0]
            at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.getInstance(Unknown Source) ~[bcprov-jdk15on-1.57.jar!/:1.57.0]
            at net.corda.core.crypto.Crypto.decodePrivateKey(Crypto.kt:301) ~[corda-core-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.PrivateKeySerializer.read(Kryo.kt:322) ~[corda-node-api-3.3-corda.jar!/:na]
            at net.corda.nodeapi.internal.serialization.kryo.PrivateKeySerializer.read(Kryo.kt:314) ~[corda-node-api-3.3-corda.jar!/:na]
            at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731) ~[kryo-4.0.0.jar!/:na]
            at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125) ~[kryo-4.0.0.jar!/:na]
            ... 36 common frames omitted

任何人都可以看到该问题,并告诉我如何解决吗?

1 个答案:

答案 0 :(得分:0)

众所周知,这是由RPC客户端使用的Corda版本与节点使用的Corda版本之间的差异引起的。如果两者都使用相同版本的Corda,则应该可以使用。