Ошибка схемы сериализации при взаимодействии узлов Corda и Corda Enterprise - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть сеть с двумя узлами:

  • NodeA работает Corda Enterprise 3
  • NodeB работает Corda (с открытым исходным кодом) 3

Когда NodeA использует Corda Finance CorDapp для перевода денег на NodeB, я получаю исключения из формы Serialization scheme not supported..

Если финансовый 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 $ десериализации $ 1 $ 1.invoke (SerializationScheme.kt: 134) в net.corda.core.serialization.SerializationFactory.withCurrentContext (SerializationAPI.kt: 71) в net.corda.serialization.internal.SerializationFactoryImpl $ десериализации $ 1.invoke (SerializationScheme.kt: 134) в net.corda.serialization.internal.SerializationFactoryImpl $ десериализации $ 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 $ сэм $ 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) в nd. И узел PartyB Vault содержит всего 100 GBP (совместимость / ресурсы / возможности / interoperability.feature: 15)

И если финансовое CorDapp было скомпилировано для Corda (с открытым исходным кодом) 3.3, я получаю следующую трассировку стека:

[WARN] 2018-10-02T11: 06: 54,096Z [Тема-1 (ActiveMQ-клиент-глобальные-потоки)] messaging.RPCServer.clientArtemisMessageHandler - сбой входящего RPC {actor_id = corda, actor_owningIdentity = O = PartyB, L = Лондон, C = GB, actor_store_id = NODE_CONFIG, invocation_id = ae1b8b8d-682a-4181-АКБ-45c061188531, invocation_timestamp = 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-узловой-апи-3,2-corda.jar :?] в net.corda.nodeapi.internal.serialization.NotSupportedSerializationScheme.deserialize (SerializationScheme.kt: 23) ~ [Corda-узловой-апи-3,2-corda.jar :?] at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl $ deserialize $ 1 $ 1.invoke (SerializationScheme.kt: 111) ~ [Corda-узловой-апи-3,2-corda.jar :?] at net.corda.core.serialization.SerializationFactory.withCurrentContext (SerializationAPI.kt: 66) ~ [Corda-ядро-3,2-corda.jar :?] at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl $ deserialize $ 1.invoke (SerializationScheme.kt: 111) ~ [Corda-узловой-апи-3,2-corda.jar :?] at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl $ deserialize $ 1.invoke (SerializationScheme.kt: 86) ~ [Corda-узловой-апи-3,2-corda.jar :?] at net.corda.core.serialization.SerializationFactory.asCurrent (SerializationAPI.kt: 80) ~ [Corda-ядро-3,2-corda.jar :?] в net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize (SerializationScheme.kt: 111) ~ [Corda-узловой-апи-3,2-corda.jar :?] at net.corda.node.services.messaging.RPCServer.clientArtemisMessageHandler (RPCServer.kt: 571) [Corda-узел-3,2-corda.jar :?] в net.corda.node.services.messaging.RPCServer.access $ clientArtemisMessageHandler (RPCServer.kt: 79) [Corda-узел-3,2-corda.jar :?] at net.corda.node.services.messaging.RPCServer $ createRpcConsumer $ 1.invoke (RPCServer.kt: 196) [Corda-узел-3,2-corda.jar :?] at net.corda.node.services.messaging.RPCServer $ createRpcConsumer $ 1.invoke (RPCServer.kt: 79) [Corda-узел-3,2-corda.jar :?] at net.corda.node.services.messaging.RPCServerKt $ sam $ MessageHandler $ 5b9bfc45.onMessage (RPCServer.kt) [Corda-узел-3,2-corda.jar :?] в org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage (ClientConsumerImpl.java:997) [Артемида-ядро-клиент-2.2.0.jar: 2.2.0] в org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access $ 400 (ClientConsumerImpl.java:49) [Артемида-ядро-клиент-2.2.0.jar: 2.2.0] в org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl $ Runner.run (ClientConsumerImpl.java:1120) [Артемида-ядро-клиент-2.2.0.jar: 2.2.0] в org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask (OrderedExecutor.java:42) [Артемида-Обще-2.2.0.jar: 2.2.0] в org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask (OrderedExecutor.java:31) [Артемида-Обще-2.2.0.jar: 2.2.0] в org.apache.activemq.artemis.utils.actors.ProcessorBase $ ExecutorTask.run (ProcessorBase.java:53) [Артемида-Обще-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] at java.lang.Thread.run (Thread.java:748) [?: 1.8.0_171] [WARN] 2018-10-02T11: 06: 54,162Z [Thread-0 (ActiveMQ-client-global-threads)] messaging.RPCServer.bindingRemovalArtemisMessageHandler - обнаружен RPC клиент отключается по адресу rpc.client.corda.4301680594427178011, планирование для пожинания {}

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 01 ноября 2018

Это ошибка в Corda 3, в результате чего:

  • CorDapp, скомпилированный для Corda Enterprise 3, не может быть запущен на узле Corda 3
  • CorDapp, скомпилированный для Corda 3, не может быть запущен на узле Corda Enterprise 3

Это связано с тем, что Corda 3 использует Kryo для RPC, а Corda Enterprise 3 использует AMQP для RPC.

Есть два обходных пути:

  • Скомпилируйте CorDapp дважды - один раз для узла Corda 3 и один раз для узла Corda Enterprise 3
  • Обновление до Corda 4
...