【问题标题】:Corda Serialization WhitelistCorda 序列化白名单
【发布时间】:2020-08-25 13:08:18
【问题描述】:

我试图序列化一个用于发送和接收的类 (DTO) 在流中。我的 DTO 类与流不在同一个模块中。我 收到以下错误

1.使用@CordaSerializable注解,我的DTO类没有被序列化,它正在抛出

java.io.NotSerializableException: Class "class com.e_mobility.dto.dashboard.DashboardDTO" is not on the whitelist or annotated with @CordaSerializable
  1. 使用如下手动白名单

    类 CustomSerializationWhiteList : SerializationWhitelist { 覆盖 val 白名单: List> = listOf(DTO::class.java) }

我在运行时收到此错误

 net.corda.core.serialization.internal.MissingSerializerException: Unable to create an object serializer for type class com.e_mobility.dto.dashboard.DashboardDTO:
Mandatory constructor parameters [arg0, arg1, arg2, arg3, arg4, arg5, arg6] are missing from the readable properties []
Either provide getters or readable fields for [arg0, arg1, arg2, arg3, arg4, arg5, arg6], or provide a custom serializer for this type

请帮我解决这个错误。 (已编辑)

【问题讨论】:

    标签: serialization blockchain corda


    【解决方案1】:

    当您创建自定义类型时,您是否检查过您的班级是否满足所有需要的要求?仅注释可能还不够。来自相关的Corda documentation 关于自定义类型的序列化:

    • 必须使用包含在 .class 文件中的参数名称来编译该类。这是 Kotlin 中的默认设置,但必须在 Java 使用 javac 的 -parameters 命令行选项
    • 该类必须使用@CordaSerializable 注释
    • 必须支持声明的构造函数参数、getter 和 setter 类型,并且在使用泛型的地方,泛型参数 必须是受支持的类型、开放通配符 (*) 或有界通配符 目前已扩展为开放通配符
    • 任何超类都必须遵守相同的规则,但可以是抽象的
    • 不支持对象图循环,因此对象不能直接或间接引用自身

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2020-06-11
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多