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()