Белый список сериализации Corda

#serialization #blockchain #corda

#сериализация #блокчейн #corda

Вопрос:

Я пытался сериализовать класс (DTO), который будет использоваться при отправке и получении в потоках.Мой класс DTO не находится в том же модуле, что и flows. Я получаю следующие ошибки

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 { переопределить значение белого списка: Список<Class<*>> = 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
  

Пожалуйста, помогите мне устранить эту ошибку. (отредактировано)

Ответ №1:

При создании пользовательского типа вы проверили, выполнены ли в вашем классе все необходимые требования? Одной аннотации может быть недостаточно. Из соответствующей документации Corda о сериализации с пользовательскими типами:

  • Класс должен быть скомпилирован с именами параметров, включенными в файл .class. Это значение по умолчанию в Kotlin, но его необходимо включить в Java с помощью параметра командной строки -parameters в javac
  • Класс должен быть аннотирован с помощью @CordaSerializable
  • Должны поддерживаться объявленные типы аргументов конструктора, средства получения и установки, а там, где используются общие параметры, общим параметром должен быть поддерживаемый тип, открытый подстановочный знак (*) или ограниченный подстановочный знак, который в настоящее время расширен до открытого подстановочного знака
  • Любой суперкласс должен соответствовать тем же правилам, но может быть абстрактным
  • Циклы объектного графа не поддерживаются, поэтому объект не может ссылаться на себя прямо или косвенно