0
votes

We are building a POC using Corda 4.0 and Springboot web server.

Following are the versions of Corda platform, Springboot server, and other essential dependencies used for building the POC-

cordaReleaseGroup=net.corda
cordaVersion=4.0
gradlePluginsVersion=4.0.45
kotlinVersion=1.2.71
junitVersion=4.12
quasarVersion=0.7.10
spring_version = '4.3.11.RELEASE'
spring_boot_version = '2.0.2.RELEASE'
spring_boot_gradle_plugin_version = '2.1.1.RELEASE'
jvmTarget = "1.8"
log4jVersion =2.11.2
platformVersion=4
slf4jVersion=1.7.25
nettyVersion=4.1.22.Final

The CorDapp developed for POC has four nodes -

Notary Node
Provider Company Node
Consumer Company 1 Node
Consumer Company 1 Sub Contact Node

There are 10 transaction flows between the above nodes, in the node databases.

Later due to a new requirement, new fields were added to the transaction schema and the Cordapp was recreated and distributed to the nodes.

When the web application was run, I cannot view the 10 transactions.

The node throws following errors:

Sun May 09 07:32:28 IST 2021>>> [ERROR] 07:50:17+0530 [Node thread-1] proxies.ExceptionSerialisingRpcOpsProxy.log - Error during RPC invocation [errorCode=1dl0tb4, moreInformationAt=https://errors.corda.net/OS/4.0/1dl0tb4] {actor_id=user1, actor_owning_identity=OU=Company, O=MyComp, L=Houston, C=US, actor_store_id=NODE_CONFIG, fiber-id=10000001, flow-id=3a590f6a-9920-4381-ab53-1e4b5465b1c8, invocation_id=f309aad5-487a-4b04-be6d-f90f83c7def7, invocation_timestamp=2021-05-09T02:20:16.497Z, origin=user1, session_id=909b6b61-f9fc-4a0f-b521-a0c2eed39516, session_timestamp=2021-05-09T02:11:19.347Z, thread-id=197}

[ERROR] 07:50:17+0530 [Node thread-1] proxies.ExceptionSerialisingRpcOpsProxy.log - Error during RPC invocation [errorCode=1uso5y8, moreInformationAt=https://errors.corda.net/OS/4.0/1uso5y8] {actor_id=user1, actor_owning_identity=OU=Company, O=MyComp, L=Houston, C=US, actor_store_id=NODE_CONFIG, fiber-id=10000001, flow-id=3a590f6a-9920-4381-ab53-1e4b5465b1c8, invocation_id=f309aad5-487a-4b04-be6d-f90f83c7def7, invocation_timestamp=2021-05-09T02:20:16.497Z, origin=user1, session_id=909b6b61-f9fc-4a0f-b521-a0c2eed39516, session_timestamp=2021-05-09T02:11:19.347Z, thread-id=197}
[ERROR] 07:50:17+0530 [Node thread-1] proxies.ExceptionSerialisingRpcOpsProxy.log - Error during RPC invocation [errorCode=1uso5y8, moreInformationAt=https://errors.corda.net/OS/4.0/1uso5y8] {actor_id=user1, actor_owning_identity=OU=Company, O=MyComp, L=Houston, C=US, actor_store_id=NODE_CONFIG, fiber-id=10000001, flow-id=3a590f6a-9920-4381-ab53-1e4b5465b1c8, invocation_id=f309aad5-487a-4b04-be6d-f90f83c7def7, invocation_timestamp=2021-05-09T02:20:16.497Z, origin=user1, session_id=909b6b61-f9fc-4a0f-b521-a0c2eed39516, session_timestamp=2021-05-09T02:11:19.347Z, thread-id=197}
[ERROR] 07:50:17+0530 [Node thread-1] proxies.ExceptionSerialisingRpcOpsProxy.log - Error during RPC invocation [errorCode=1uso5y8, moreInformationAt=https://errors.corda.net/OS/4.0/1uso5y8] {actor_id=user1, actor_owning_identity=OU=Company, O=MyComp, L=Houston, C=US, actor_store_id=NODE_CONFIG, fiber-id=10000001, flow-id=3a590f6a-9920-4381-ab53-1e4b5465b1c8, invocation_id=f309aad5-487a-4b04-be6d-f90f83c7def7, invocation_timestamp=2021-05-09T02:20:16.497Z, origin=user1, session_id=909b6b61-f9fc-4a0f-b521-a0c2eed39516, session_timestamp=2021-05-09T02:11:19.347Z, thread-id=197}

The node log shows following error:

          Mandatory property bndArea of local type is not present in remote type - did someone remove a property from the schema without considering old clients?
W 07:50:19 119 ThrowableSerializer.fromProxy - Unexpected exception de-serializing throwable: net.corda.core.node.services.VaultQueryException. Converting to CordaRuntimeException.
java.lang.reflect.InvocationTargetException: null
        at sun.reflect.GeneratedConstructorAccessor63.newInstance(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_271]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_271]
        at net.corda.serialization.internal.amqp.custom.ThrowableSerializer.fromProxy(ThrowableSerializer.kt:71) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.custom.ThrowableSerializer.fromProxy(ThrowableSerializer.kt:14) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.CustomSerializer$Proxy.readObject(CustomSerializer.kt:179) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput.readObject$serialization(DeserializationInput.kt:182) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput.readObjectOrNull$serialization(DeserializationInput.kt:147) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DescribedTypeReadStrategy.readProperty(ComposableTypePropertySerializer.kt:202) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.ComposableTypePropertySerializer.readProperty(ComposableTypePropertySerializer.kt) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.ComposableObjectReader$readObject$$inlined$ifThrowsAppend$lambda$1.invoke(ObjectSerializer.kt:140) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.ComposableObjectReader$readObject$$inlined$ifThrowsAppend$lambda$1.invoke(ObjectSerializer.kt:122) ~[corda-serialization-4.0.jar:?]
        at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:149) ~[kotlin-stdlib-1.2.71.jar:1.2.71-release-64 (1.2.71)]
        at net.corda.serialization.internal.amqp.ComposableObjectReader.readObject(ObjectSerializer.kt:219) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.ComposableObjectSerializer.readObject(ObjectSerializer.kt:91) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.CustomSerializer$Proxy.readObject(CustomSerializer.kt:178) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput.readObject$serialization(DeserializationInput.kt:182) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput.readObjectOrNull$serialization(DeserializationInput.kt:147) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput$deserialize$1.invoke(DeserializationInput.kt:124) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput.des(DeserializationInput.kt:99) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.DeserializationInput.deserialize(DeserializationInput.kt:119) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.amqp.AbstractAMQPSerializationScheme.deserialize(AMQPSerializationScheme.kt:225) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:102) ~[corda-serialization-4.0.jar:?]
        at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:72) ~[corda-core-4.0.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:102) ~[corda-serialization-4.0.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:70) ~[corda-serialization-4.0.jar:?]
        at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:86) ~[corda-core-4.0.jar:?]
        at net.corda.serialization.internal.SerializationFactoryImpl.deserialize(SerializationScheme.kt:102) ~[corda-serialization-4.0.jar:?]
        at net.corda.nodeapi.RPCApi$ServerToClient$Companion.fromClientMessage(RPCApi.kt:378) ~[corda-node-api-4.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandler.artemisMessageHandler(RPCClientProxyHandler.kt:309) ~[corda-rpc-4.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandler.access$artemisMessageHandler(RPCClientProxyHandler.kt:75) ~[corda-rpc-4.0.jar:?]
        at net.corda.client.rpc.internal.RPCClientProxyHandler$initSessions$1.invoke(RPCClientProxyHandler.kt:519) ~[corda-rpc-4.0.jar:?]
<============-> 93% EXECUTING [28m 52s]
> :server:compComp
        at net.corda.client.rpc.internal.RPCClientProxyHandlerKt$sam$org_apache_activemq_artemis_api_core_client_MessageHandler$0.onMessage(RPCClientProxyHandler.kt) ~[corda-rpc-4.0.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_271]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_271]
        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.IllegalArgumentException: Parameter specified as non-null is null: method net.corda.core.node.services.VaultQueryException.<init>, parameter description
        at net.corda.core.node.services.VaultQueryException.<init>(VaultService.kt) ~[corda-core-4.0.jar:?]
        ... 43 more
E 08:07:59 74 [dispatcherServlet].log - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is net.corda.core.CordaRuntimeException] with root cause
net.corda.core.CordaRuntimeException: null

Question: Is it possible to retrieve the transactions having old schema? Pleasee guide

UPDATED

I am using following code to retrieve the records from vault:

val vaultStatesAndRefs = services.proxy.vaultQueryBy<State>().states
val vaultStates = vaultStatesAndRefs.map { it.state.data }
resultset = vaultStates.map { it.toJson() }.toString()
1

1 Answers

0
votes

Some recommendations:

How are you running the schema queries? I don't seem to see that here.

If you're still building on Corda 4, be aware Corda 5 comes out later this year, and we're currently on 4.8, so it may be worth trying to upgrade.

If you're looking for guidance on structuring the app & updating your dependencies, take a look at the cordapp template: https://github.com/corda/cordapp-template-kotlin

now as far as how to query, you might want to query your schema within the flow to see if it's getting stored the way you expect?

you should be able to stick something like this in your flow (assuming it's a linear state)

            List<UUID> listOfLinearIds = Arrays.asList(stateLinearId.getId());
            QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria(null, listOfLinearIds);
            Vault.Page results = getServiceHub().getVaultService().queryBy(IOUState.class, queryCriteria);
            StateAndRef inputStateAndRefToSettle = (StateAndRef) results.getStates().get(0);
            IOUState inputStateToSettle = (IOUState) ((StateAndRef) results.getStates().get(0)).getState().getData();

Some resources: