java.io.NotSerializableException: -> Не найден конструктор для десериализации для класса java.sql.Timestamp - PullRequest
0 голосов
/ 26 апреля 2018

Класс состояния Collateral с переменной-членом типа java.sql.Timestamp, выдаваемой ниже исключения при десериализации в версии 3.1-corda:

java.io.NotSerializableException: net.corda.core.contracts.TransactionState -> data(net.corda.core.contracts.ContractState) -> No constructor for deserialization found for class java.sql.Timestamp. -> class java.sql.Timestamp -> class com.syne.cordapp.state.Collateral

Класс java.sql.Timestamp уже является частью белого списка, реализованного как:

class CordaSerializationWhitelist : SerializationWhitelist {
    override val whitelist: List<Class<*>>
        get() = listOf(Timestamp::class.java, HashSet::class.java, Set::class.java)
}

И этот класс также добавлен в файл - META-INF/services/net.corda.core.serialization.SerializationWhitelist

Так в чем может быть причина?

1 Ответ

0 голосов
/ 26 апреля 2018

Как указывает Андреас, если в классе Java есть несколько конструкторов, среда сериализации Corda требует, чтобы он указывал, какой конструктор использовать, используя аннотацию @ConstructorForDeserialization.

java.sql.Timestamp этого не делает.Чтобы использовать его в качестве поля в пределах состояния, вам необходимо предоставить настраиваемый сериализатор: https://docs.corda.net/cordapp-custom-serializers.html. Однако мы рекомендуем использовать поддерживаемые типы, где это возможно.

...