Тогда я решил использовать «java.util.Properties» (или, если быть точным: класс, производный от Properties) для этой цели, поскольку они реализуют именно такую иерархию карт: при создании нового экземпляра Properties вы можете предоставить родительский экземпляр Properties.
Я (де-)сериализую эти свойства в/из JSON, используя метод com.fasterxml.jackson(.databind)-библиотека (
Код: Выделить всё
com.fasterxml.jackson.databind.json.JsonMapper). Это работало без каких-либо проблем с Jackson v2, но теперь я только что обновился до Jackson v3, и в этой версии десериализация свойств не удалась. :-(
При попытке прочитать файлы JSON, созданные в более ранней версии, я постоянно получаю ошибки:
File 'test.kmc' is not a valid configuration (reason: 'com.fasterxml.jackson.databind.JsonMappingException: Problem deserializing property 'properties' (expected type: [map type; class my.application.entities.NodeProperties, [simple type, class java.lang.String] -> [simple type, class java.lang.String]]; actual type: `java.util.Properties`), problem: argument type mismatch at [Source: (BufferedInputStream); line: 8, column: 2] (through reference chain: my.application.entities.nodes.RootNode["properties"])
Код: Выделить всё
public class NodeProperties extends Properties {
...
}
Есть идеи, почему десериализация Джексона java.util.Properties завершается неудачно в версии 3.x? Это ожидаемое поведение? Требуется ли теперь для этого какой-то флаг или помощник?