gpt4 book ai didi

corda - java.io.NotSerializableException : Constructor parameter arg0 doesn't refer to a property of class

转载 作者:行者123 更新时间:2023-12-01 08:48:31 29 4
gpt4 key购买 nike

在 IntelliJ 中运行 Corda 合约测试时,用 Java 编写的测试有时会失败,并出现以下异常:

[ERROR] 17:02:51,821 [main] (Schema.kt:437) amqp.Schema.fingerprintForType - Constructor parameter arg0 doesn't refer to a property of class 'class mypackage.MyState' -> class mypackage.MyState {} java.io.NotSerializableException: Constructor parameter arg0 doesn't refer to a property of class 'class mypackage.MyState' at net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.propertiesForSerializationFromConstructor(SerializationHelper.kt:249) ~[corda-node-api-corda-3.0.jar:?]

我该如何解决这个问题?

最佳答案

正如 Joel 所解释的,默认情况下,已编译的 Java 类将为其构造函数参数使用默认名称。在 Corda 的情况下,我们应该对参数名称使用相同的名称,不是因为它们更好地识别它们或者它们保持相同的名称很漂亮,而是因为 AMQP 通过实现的序列化和反序列化过程中有一个验证专门为 Corda (corda-node-api) 定制和重写的组件。该组件检查事务(ContractState)期间涉及的每个属性。提醒一下,在 Corda 中,所有的序列化和反序列化都是受控的,如果发生冲突,可能会失败。

要解决这个问题,有不同的形式,这取决于你使用哪个工具来自动化编译 - gradle、maven 等。这是一个独立于 IDE(Eclipse、IntelliJ 等)的解决方案。

Maven - pom.xml

        <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<compilerArgs>
<arg>-verbose</arg>
<arg>-parameters</arg> <!-- To keep parameter names-->
<arg>-Xlint:all,-options,-path</arg>
</compilerArgs>
</configuration>
</plugin>

有关 Pass Compiler Arguments Maven 的更多信息 https://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html

build.gradle - Gradle

tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" << "-Xlint:-options" << "-parameters"
}

有关 CompileOptions Gradle 的更多信息 https://docs.gradle.org/current/dsl/org.gradle.api.tasks.compile.CompileOptions.html

您可以在此处查看有关如何设置 compileOptions 的 StackOverflow 帖子 How can I set the compileOptions for my Gradle Java plugin?

关于corda - java.io.NotSerializableException : Constructor parameter arg0 doesn't refer to a property of class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48772259/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com