Com.fasterxml.jackson(.databind) v3 имеет проблемы с десериализацией `java.util.Properties` (это работало в v2)JAVA

Программисты JAVA общаются здесь
Anonymous
Com.fasterxml.jackson(.databind) v3 имеет проблемы с десериализацией `java.util.Properties` (это работало в v2)

Сообщение Anonymous »

В моем Java-приложении мне нужно было реализовать «иерархический HashMap», что означает: у меня есть иерархия HashMap (каждый из которых содержит пары имя-значение), которые связаны древовидным образом и ведут себя так, что, если ключ не найден на локальной карте, они проверяют этот ключ в своей «родительской карте» (рекурсивно до корневой карты) и - если они его находят, они предоставляют значение этой «верхней» карты.
Тогда я решил использовать java.util.Properties (или, если быть точным: класс, производный от Properties) для этой цели, поскольку они реализуют именно такую иерархию карт: при создании нового экземпляра Properties вы можете предоставить родительский экземпляр Properties.
Я (де-)сериализую эти свойства в/из JSON, используя метод com.fasterxml.jackson(.databind)-библиотека (

Код: Выделить всё

com.fasterxml.jackson.databind.json.JsonMapper). Это работало без каких-либо проблем с Jackson v2, но теперь я только что обновился до Jackson v3, и в этой версии десериализация свойств не удалась.
При попытке чтения файлов JSON, созданных в более ранней версии, я продолжаю получать ошибки:

Файл «test.kmc» не является допустимой конфигурацией (причина: «com.fasterxml.jackson.databind.JsonMappingException: Проблема»). десериализация свойства "свойства" (ожидаемый тип: [тип карты; класс my.application.entities.NodeProperties, [простой тип, класс java.lang.String] -> [простой тип, класс java.lang.String]]; фактический тип: `java.util.Properties`), проблема: несоответствие типа аргумента в [Источник: (BufferedInputStream); строка: 8, столбец: 2] (через цепочку ссылок: my.application.entities.nodes.RootNode["properties"])

Примечание: класс NodeProperties
 — это простой класс, производный от java.util.Properties, например:

Код: Выделить всё

public class NodeProperties extends Properties {
...
}
и просто добавляет несколько дополнительных операций, которые мне нужны для моих иерархий пар имя-значение.
Есть идеи, почему десериализация Джексона java.util.Properties завершается неудачей в версии 3.x? Это ожидаемое поведение? Требуется ли теперь для этого какой-то флаг или помощник?

Вернуться в «JAVA»