【问题标题】:Serialization scheme error during interaction between Corda and Corda Enterprise nodesCorda 和 Corda Enterprise 节点交互期间的序列化方案错误
【发布时间】:2019-04-05 20:25:40
【问题描述】:

我有一个包含两个节点的网络:

  • NodeA 运行 Corda Enterprise 3
  • NodeB 运行 Corda(开源)3

当NodeA 使用 Corda Finance CorDapp 将现金转移到NodeB 时,我收到Serialization scheme not supported. 形式的例外情况。

如果 Finance CorDapp 是针对 Corda Enterprise 3.2 编译的,我会得到以下堆栈跟踪:

java.lang.UnsupportedOperationException:序列化方案 ([636F7264610000],RPCClient)不支持。在 net.corda.serialization.internal.SerializationFactoryImpl$schemeFor$1.apply(SerializationScheme.kt:128) 在 net.corda.serialization.internal.SerializationFactoryImpl$schemeFor$1.apply(SerializationScheme.kt:103) 在 java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) 在 net.corda.serialization.internal.SerializationFactoryImpl.schemeFor(SerializationScheme.kt:124) 在 net.corda.serialization.internal.SerializationFactoryImpl.access$schemeFor(SerializationScheme.kt:103) 在 net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:134) 在 net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:71) 在 net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:134) 在 net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:103) 在 net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:85) 在 net.corda.serialization.internal.SerializationFactoryImpl.deserialize(SerializationScheme.kt:134) 在 net.corda.nodeapi.RPCApi$ServerToClient$Companion.fromClientMessage(RPCApi.kt:373) 在 net.corda.client.rpc.internal.RPCClientProxyHandler.artemisMessageHandler(RPCClientProxyHandler.kt:301) 在 net.corda.client.rpc.internal.RPCClientProxyHandler.access$artemisMessageHandler(RPCClientProxyHandler.kt:75) 在 net.corda.client.rpc.internal.RPCClientProxyHandler$initSessions$1.invoke(RPCClientProxyHandler.kt:509) 在 net.corda.client.rpc.internal.RPCClientProxyHandler$initSessions$1.invoke(RPCClientProxyHandler.kt:75) 在 net.corda.client.rpc.internal.RPCClientProxyHandlerKt$sam$org_apache_activemq_artemis_api_core_client_MessageHandler$0.onMessage(RPCClientProxyHandler.kt) 在 org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1002) 在 org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:50) 在 org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1125) 在 org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) 在 org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) 在 org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:66) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) 在✽。并且节点PartyB金库包含总现金100 英镑(兼容性/资源/功能/互操作性.feature:15)

如果 Finance CorDapp 是针对 Corda(开源)3.3 编译的,我会得到以下堆栈跟踪:

[警告] 2018-10-02T11:06:54,096Z [Thread-1 (ActiveMQ-client-global-threads)] messages.RPCServer.clientArtemisMessageHandler - 入站 RPC 失败 {actor_id=corda,actor_owningIdentity=O=PartyB,L=伦敦,C=GB, actor_store_id=NODE_CONFIG, invocation_id=ae1b8b8d-682a-4181-acba-45c061188531, 调用时间戳=2018-10-02T11:06:54.094Z, session_id=85154c4f-cdfa-4f76-b888-51d8f862c3b1, session_timestamp=2018-10-02T11:06:54.050Z} java.lang.UnsupportedOperationException:序列化方案不 支持的。 在 net.corda.nodeapi.internal.serialization.NotSupportedSerializationScheme.doThrow(SerializationScheme.kt:19) ~[corda-node-api-3.2-corda.jar:?] 在 net.corda.nodeapi.internal.serialization.NotSupportedSerializationScheme.deserialize(SerializationScheme.kt:23) ~[corda-node-api-3.2-corda.jar:?] 在 net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:111) ~[corda-node-api-3.2-corda.jar:?] 在 net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) ~[corda-core-3.2-corda.jar:?] 在 net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:111) ~[corda-node-api-3.2-corda.jar:?] 在 net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:86) ~[corda-node-api-3.2-corda.jar:?] 在 net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80) ~[corda-core-3.2-corda.jar:?] 在 net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize(SerializationScheme.kt:111) ~[corda-node-api-3.2-corda.jar:?] 在 net.corda.node.services.messaging.RPCServer.clientArtemisMessageHandler(RPCServer.kt:571) [corda-node-3.2-corda.jar:?] 在 net.corda.node.services.messaging.RPCServer.access$clientArtemisMessageHandler(RPCServer.kt:79) [corda-node-3.2-corda.jar:?] 在 net.corda.node.services.messaging.RPCServer$createRpcConsumer$1.invoke(RPCServer.kt:196) [corda-node-3.2-corda.jar:?] 在 net.corda.node.services.messaging.RPCServer$createRpcConsumer$1.invoke(RPCServer.kt:79) [corda-node-3.2-corda.jar:?] 在 net.corda.node.services.messaging.RPCServerKt$sam$MessageHandler$5b9bfc45.onMessage(RPCServer.kt) [corda-node-3.2-corda.jar:?] 在 org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:997) [artemis-core-client-2.2.0.jar:2.2.0] 在 org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access 400 美元(ClientConsumerImpl.java:49) [artemis-core-client-2.2.0.jar:2.2.0] 在 org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1120) [artemis-core-client-2.2.0.jar:2.2.0] 在 org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) [artemis-commons-2.2.0.jar:2.2.0] 在 org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) [artemis-commons-2.2.0.jar:2.2.0] 在 org.apache.activemq.artemis.utils.actors.ProcessorBase$ExecutorTask.run(ProcessorBase.java:53) [artemis-commons-2.2.0.jar:2.2.0] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_171] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_171] 在 java.lang.Thread.run(Thread.java:748) [?:1.8.0_171] [WARN] 2018-10-02T11:06:54,162Z [Thread-0 (ActiveMQ-client-global-threads)] messages.RPCServer.bindingRemovalArtemisMessageHandler - 检测到 RPC 客户端在地址 rpc.client.corda.4301680594427178011 上断开连接, 安排收获{}

我该如何解决这个问题?

【问题讨论】:

    标签: corda


    【解决方案1】:

    这是 Corda 3 中的一个错误,其中:

    • 针对 Corda Enterprise 3 编译的 CorDapp 无法在 Corda 3 节点上运行
    • 针对 Corda 3 编译的 CorDapp 无法在 Corda Enterprise 3 节点上运行

    这是因为 Corda 3 使用 Kryo 进行 RPC,而 Corda Enterprise 3 使用 AMQP 进行 RPC。

    有两种解决方法:

    • 编译 CorDapp 两次 - 一次用于 Corda 3 节点,一次用于 Corda Enterprise 3 节点
    • 升级到 Corda 4

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多