java.io.NotSerializableException 在 Corda V3.1 中创建状态时
java.io.NotSerializableException when creating state in Corda V3.1
从 Corda V2 迁移到 Corda V3.1 时。无法保存或创建状态,低于异常,未找到序列化构造函数,但合同状态具有默认构造函数和参数化构造函数。
[WARN ] 2018-04-12T17:40:09,773Z [Node thread-1] flow.[f1e07b24-6f07-4e2b-a9cf-c9f92c14985a].run - Terminated by unexpected exception {}
java.io.NotSerializableException: net.corda.core.contracts.TransactionState -> data(net.corda.core.contracts.ContractState) -> No constructor for deserialization found for class com.demo.project.nodes.states.ContractState.
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.constructorForDeserialization(SerializationHelper.kt:50) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.<init>(ObjectSerializer.kt:19) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$makeClassSerializer.apply(SerializerFactory.kt:271) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$makeClassSerializer.apply(SerializerFactory.kt:40) ~[corda-node-api-3.1-corda.jar:?]
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(Unknown Source) ~[?:1.8.0_161]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.makeClassSerializer(SerializerFactory.kt:255) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.get(SerializerFactory.kt:100) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:98) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObjectOrNull$node_api(SerializationOutput.kt:93) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.PropertySerializer$DescribedTypePropertySerializer.writeProperty(PropertySerializer.kt:84) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:66) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:17) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withList(SerializationHelper.kt:401) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:64) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:17) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withDescribed(SerializationHelper.kt:390) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.writeObject(ObjectSerializer.kt:62) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:106) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api$default(SerializationOutput.kt:97) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:78) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:64) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:22) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withList(SerializationHelper.kt:401) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:63) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:22) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withDescribed(SerializationHelper.kt:390) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput._serialize$node_api(SerializationOutput.kt:62) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.serialize(SerializationOutput.kt:36) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.AbstractAMQPSerializationScheme.serialize(AMQPSerializationScheme.kt:128) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:126) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:86) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) ~[corda-core-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:126) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:86) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80) ~[corda-core-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.serialize(SerializationScheme.kt:126) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationAPIKt.serialize(SerializationAPI.kt:221) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationAPIKt.serialize$default(SerializationAPI.kt:220) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.WireTransaction$Companion.createComponentGroups(WireTransaction.kt:242) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder$toWireTransactionWithContext.invoke(TransactionBuilder.kt:114) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder$toWireTransactionWithContext.invoke(TransactionBuilder.kt:36) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toWireTransactionWithContext$core(TransactionBuilder.kt:113) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toWireTransactionWithContext$core$default(TransactionBuilder.kt:97) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toWireTransaction(TransactionBuilder.kt:95) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toLedgerTransaction(TransactionBuilder.kt:135) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.verify(TransactionBuilder.kt:143) ~[corda-core-3.1-corda.jar:?]
at com.demo.project.nodes.initiators.ContractStateFlowInitiator.call(ContractStateFlowInitiator.java:54) ~[project-node-1.0.jar:?]
at com.demo.project.nodes.initiators.ContractStateFlowInitiator.call(ContractStateFlowInitiator.java:25) ~[project-node-1.0.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:96) [corda-node-3.1-corda.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:44) [corda-node-3.1-corda.jar:?]
at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_161]
at net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$thread.run(AffinityExecutor.kt:62) [corda-node-3.1-corda.jar:?]
Corda version :corda_release_version = '3.1-corda'
Corda Gradle Plugin Version: corda_gradle_plugins_version = '3.1.0'
Quasar Version: quasar_version = '0.7.9'
Boot Version :spring_boot_version = '1.5.9.RELEASE'
在ContractStateFlowInitiator中校验合约时出现错误class:txBuilder.verify(getServiceHub());
2.0 版的功能
即使使用 corda 3.0 版,错误仍然存在。我尝试将我的状态 com.demo.project.nodes.states.ContractState 重命名为 com.demo.project.nodes.states.DemoContractState 还在该状态中创建了一个默认构造函数但没有运气。
用@ConstructorForDeserialization
注释你的参数化构造函数
尽管 java 文档提到使用注解[@CordaConstructor] -- java 文档需要在 SerializationHelper.Kt
中更新
在某些情况下,还看到公证人也应该拥有共享项目。
还要确保将 -parmeters 添加到所有子项目
例如:
subprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << '-parameters'
}
}
我也没有使用在 V2 上工作的 V3 源代码。
并且发生了同样的异常。
我认为StackTrace的内容有些不同,但我认为它会有所帮助。
除了上面提到的在 class 的构造函数上添加 @ConstructorForDeserialization 的解决方案外,我们还需要在 IDE 设置中进行一些更改。
修复:在 IntelliJ 中:
Open the settings:
Windows: File -> Settings
osX: IntelliJ IDEA -> Preferences...
Go to Build, Execution, Deployment -> Compiler -> Java Compiler
Write -parameters in the Additional command line parameters field
Completely rebuild the project (Build -> Rebuild Project)
参考是这个 corda 训练营 link : https://github.com/corda/bootcamp-cordapp/wiki/Troubleshooting
从 Corda V2 迁移到 Corda V3.1 时。无法保存或创建状态,低于异常,未找到序列化构造函数,但合同状态具有默认构造函数和参数化构造函数。
[WARN ] 2018-04-12T17:40:09,773Z [Node thread-1] flow.[f1e07b24-6f07-4e2b-a9cf-c9f92c14985a].run - Terminated by unexpected exception {}
java.io.NotSerializableException: net.corda.core.contracts.TransactionState -> data(net.corda.core.contracts.ContractState) -> No constructor for deserialization found for class com.demo.project.nodes.states.ContractState.
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.constructorForDeserialization(SerializationHelper.kt:50) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.<init>(ObjectSerializer.kt:19) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$makeClassSerializer.apply(SerializerFactory.kt:271) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$makeClassSerializer.apply(SerializerFactory.kt:40) ~[corda-node-api-3.1-corda.jar:?]
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(Unknown Source) ~[?:1.8.0_161]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.makeClassSerializer(SerializerFactory.kt:255) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.get(SerializerFactory.kt:100) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:98) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObjectOrNull$node_api(SerializationOutput.kt:93) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.PropertySerializer$DescribedTypePropertySerializer.writeProperty(PropertySerializer.kt:84) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:66) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:17) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withList(SerializationHelper.kt:401) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:64) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer$writeObject$$inlined$ifThrowsAppend$lambda.invoke(ObjectSerializer.kt:17) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withDescribed(SerializationHelper.kt:390) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.writeObject(ObjectSerializer.kt:62) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:106) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api$default(SerializationOutput.kt:97) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:78) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:64) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:22) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withList(SerializationHelper.kt:401) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:63) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialize.invoke(SerializationOutput.kt:22) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withDescribed(SerializationHelper.kt:390) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput._serialize$node_api(SerializationOutput.kt:62) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.serialize(SerializationOutput.kt:36) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.amqp.AbstractAMQPSerializationScheme.serialize(AMQPSerializationScheme.kt:128) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:126) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:86) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) ~[corda-core-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:126) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize.invoke(SerializationScheme.kt:86) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80) ~[corda-core-3.1-corda.jar:?]
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.serialize(SerializationScheme.kt:126) ~[corda-node-api-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationAPIKt.serialize(SerializationAPI.kt:221) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationAPIKt.serialize$default(SerializationAPI.kt:220) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.WireTransaction$Companion.createComponentGroups(WireTransaction.kt:242) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder$toWireTransactionWithContext.invoke(TransactionBuilder.kt:114) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder$toWireTransactionWithContext.invoke(TransactionBuilder.kt:36) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toWireTransactionWithContext$core(TransactionBuilder.kt:113) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toWireTransactionWithContext$core$default(TransactionBuilder.kt:97) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toWireTransaction(TransactionBuilder.kt:95) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.toLedgerTransaction(TransactionBuilder.kt:135) ~[corda-core-3.1-corda.jar:?]
at net.corda.core.transactions.TransactionBuilder.verify(TransactionBuilder.kt:143) ~[corda-core-3.1-corda.jar:?]
at com.demo.project.nodes.initiators.ContractStateFlowInitiator.call(ContractStateFlowInitiator.java:54) ~[project-node-1.0.jar:?]
at com.demo.project.nodes.initiators.ContractStateFlowInitiator.call(ContractStateFlowInitiator.java:25) ~[project-node-1.0.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:96) [corda-node-3.1-corda.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:44) [corda-node-3.1-corda.jar:?]
at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) [quasar-core-0.7.9-jdk8.jar:0.7.9]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_161]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_161]
at net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$thread.run(AffinityExecutor.kt:62) [corda-node-3.1-corda.jar:?]
Corda version :corda_release_version = '3.1-corda' Corda Gradle Plugin Version: corda_gradle_plugins_version = '3.1.0' Quasar Version: quasar_version = '0.7.9' Boot Version :spring_boot_version = '1.5.9.RELEASE'
在ContractStateFlowInitiator中校验合约时出现错误class:txBuilder.verify(getServiceHub());
2.0 版的功能
即使使用 corda 3.0 版,错误仍然存在。我尝试将我的状态 com.demo.project.nodes.states.ContractState 重命名为 com.demo.project.nodes.states.DemoContractState 还在该状态中创建了一个默认构造函数但没有运气。
用@ConstructorForDeserialization
注释你的参数化构造函数尽管 java 文档提到使用注解[@CordaConstructor] -- java 文档需要在 SerializationHelper.Kt
中更新在某些情况下,还看到公证人也应该拥有共享项目。
还要确保将 -parmeters 添加到所有子项目 例如:
subprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << '-parameters'
}
}
我也没有使用在 V2 上工作的 V3 源代码。 并且发生了同样的异常。 我认为StackTrace的内容有些不同,但我认为它会有所帮助。
除了上面提到的在 class 的构造函数上添加 @ConstructorForDeserialization 的解决方案外,我们还需要在 IDE 设置中进行一些更改。
修复:在 IntelliJ 中:
Open the settings:
Windows: File -> Settings
osX: IntelliJ IDEA -> Preferences...
Go to Build, Execution, Deployment -> Compiler -> Java Compiler
Write -parameters in the Additional command line parameters field
Completely rebuild the project (Build -> Rebuild Project)
参考是这个 corda 训练营 link : https://github.com/corda/bootcamp-cordapp/wiki/Troubleshooting