Клиент Corda 4.3 выдает ошибку rp c, когда мы используем LinearStateQueryCriteria для запроса по линейному идентификатору - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь вызвать получение по линейному идентификатору для состояния из приложения Springboot, используя клиент Corda RP c. Cordapps создаются с использованием Corda 4.3.

Ниже приведен запрос, который я использую:

QueryCriteria queryCriteria =
                new QueryCriteria.LinearStateQueryCriteria(null, idList, status, contractStateTypes);
List<StateAndRef<DemoState>> stateAndRefs = cordaRPCOps.vaultQueryByCriteria(queryCriteria, stateType).getStates();

Запрос не может получить данные и выдает исключение, как показано ниже, , но если я использую Клиент Corda 4.1 rp c тот же запрос возвращает правильный результат .

Ниже приведено исключение, показанное в журналах узла corda при использовании corda rp c 4.3:

[WARN ] 2020-04-28T15:35:12,118Z [Thread-964 (ActiveMQ-client-global-threads)] rpc.RPCServer.clientArtemisMessageHandler -
 Inbound RPC failed [errorCode=1ctda0y, moreInformationAt=https://errors.corda.net/ENT/4.1/1ctda0y] {actor_id=user1, actor
_owning_identity=O=SBI, L=Panjim, C=IN, actor_store_id=NODE_CONFIG, invocation_id=81afab50-486a-406d-9e17-bbbcfdf5aaed, in
vocation_timestamp=2020-04-28T15:35:12.117Z, origin=user1, session_id=472a8267-7035-4e58-be6f-7b762c82bf2b, session_timest
amp=2020-04-28T15:32:59.497Z}
java.io.NotSerializableException: Internal deserialization failure: java.lang.ArrayIndexOutOfBoundsException: java.util.Li
st<*> -> net.corda.core.node.services.vault.QueryCriteria$LinearStateQueryCriteria -> null
        at net.corda.serialization.internal.amqp.DeserializationInput.des(DeserializationInput.kt:106) ~[corda-serializati
on-4.1.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput.deserialize(DeserializationInput.kt:119) ~[corda-ser
ialization-4.1.jar:?]
        at net.corda.serialization.internal.amqp.AbstractAMQPSerializationScheme.deserialize(AMQPSerializationScheme.kt:225) ~[corda-serialization-4.1.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:105) ~[corda-serialization-4.1.jar:?]
        at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:71) ~[corda-core-4.1.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:105) ~[corda-serialization-4.1.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:73) ~[corda-serialization-4.1.jar:?]
        at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:85) ~[corda-core-4.1.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl.deserialize(SerializationScheme.kt:105) ~[corda-serialization-4.1.jar:?]
        at net.corda.node.services.rpc.RPCServer.clientArtemisMessageHandler(RPCServer.kt:584) ~[corda-node-4.1.jar:?]
        at net.corda.node.services.rpc.RPCServer.access$clientArtemisMessageHandler(RPCServer.kt:77) ~[corda-node-4.1.jar:?]
        at net.corda.node.services.rpc.RPCServer$createRpcConsumer$1.invoke(RPCServer.kt:295) ~[corda-node-4.1.jar:?]
        at net.corda.node.services.rpc.RPCServer$createRpcConsumer$1.invoke(RPCServer.kt:77) ~[corda-node-4.1.jar:?]
        at net.corda.node.services.rpc.RPCServerKt$sam$org_apache_activemq_artemis_api_core_client_MessageHandler$0.onMessage(RPCServer.kt) ~[corda-node-4.1.jar:?]
        at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1002) ~[artemis-core-client-2.6.2.jar:2.6.2]
        at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:50) ~[artemis-core-client-2.6.2.jar:2.6.2]
        at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1125) ~[artemis-core-client-2.6.2.jar:2.6.2]
        at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) ~[artemis-commons-2.6.2.jar:2.6.2]
        at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) ~[artemis-commons-2.6.2.jar:2.6.2]
        at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:66) ~[artemis-commons-2.6.2.jar:2.6.2]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_172]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_172]
        at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) ~[artemis-commons-2.6.2.jar:2.6.2]
Caused by: java.lang.ArrayIndexOutOfBoundsException: java.util.List<*> -> net.corda.core.node.services.vault.QueryCriteria$LinearStateQueryCriteria -> null

Любые указатели на то, как мы могли бы запустить это используя corda rp c 4.3?

1 Ответ

0 голосов
/ 30 апреля 2020

Кажется, вы используете CordaRP C 4.3, когда ваш узел Corda работает под управлением v4.1. В таких случаях вам необходимо предоставить от minimumServerProtocolVersion до CordaRPCClientConfiguration.

Вот пример кода:

CordaRPCClientConfiguration config = 
    new CordaRPCClientConfiguration(Duration.ofMinutes(3), 4);
CordaRPCOps rpcProxy = new CordaRPCClient(NetworkHostAndPort.parse("<host>:<port>"), config)
    .start(<username>, <password>).getProxy();

Обратите внимание на часть CordaRPCClientConfiguration(Duration.ofMinutes(3), 4), здесь "4" minimumServerProtocolVersion поддерживается, что соответствует Corda 4.0.

...