С моей моделью данных, которая в основном представляет собой дерево с родительскими дочерними элементами, у Dozer возникают проблемы с их успешным сопоставлением, поскольку он интерпретирует поле (которое использует тип интерфейса в качестве параметра) как класс и пытается создать его экземпляр с помощью конструктора. . Это приводит к следующему исключению;
ERROR [MappingProcessor] - Field mapping error -->
MapId: null
Type: null
Source parent class: com.*.shared.model.Module
Source field name: parent
Source field type: class com.*.shared.model.Datawarehouse
Source field value: com.*.shared.model.Datawarehouse@706ce458
Dest parent class: com.*.shared.model.Module
Dest field name: parent
Dest field type: com.*.shared.model.Model
org.dozer.MappingException: java.lang.NoSuchMethodException: com.*.shared.model.Model.<init>()
Это сопоставление того же класса, и хотя Dozer правильно идентифицирует родительское поле в исходном классе как имеющее тип Datawarehouse, поскольку метод set в классе Module для его родителя использует интерфейс Model в качестве параметра, похоже, что он пытается для создания экземпляра типа модели, что, конечно, не работает, поскольку модель представляет собой интерфейс без конструктора, а не хранилище данных, как указывает поле исходного класса.
Я знаю об использовании bean-factories для изменения стандартного поведения сопоставления, но я удивлен, что это единственный способ решить эту проблему. Мне кажется, что у Dozer уже есть необходимая информация, поскольку он идентифицирует тип исходного класса, и для меня необычно то, что он пытается создать экземпляр интерфейса, указанного сигнатурой установщика, а не тип, который он пытается отобразить.
Какие-либо предложения?