Dozer пытается сопоставить класс с его интерфейсом

С моей моделью данных, которая в основном представляет собой дерево с родительскими дочерними элементами, у 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 уже есть необходимая информация, поскольку он идентифицирует тип исходного класса, и для меня необычно то, что он пытается создать экземпляр интерфейса, указанного сигнатурой установщика, а не тип, который он пытается отобразить.

Какие-либо предложения?


person DavidH    schedule 01.07.2013    source источник
comment
У вас есть конфигурация Dozer, связанная с этим классом?   -  person OmegaZiv    schedule 19.03.2014


Ответы (1)


Вы можете решить эту проблему, используя теги dozer a-hint и b-hint в конфигурации dozer xml. Указание, какой класс следует использовать вместо интерфейса.

person vbazaga86    schedule 20.07.2014