С моей моделью данных, которая в основном является деревом с родительскими детьми, 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.*[email protected]
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, так как метод набора на классе модуля для своего родителя использует интерфейс модели, как его Параметр, кажется, пытается создать экземпляр типа модели, который, конечно же, терпит неудачу, поскольку модель представляет собой интерфейс без конструктора, а не Datawarehouse, как указывает поле исходного класса.
Я знаю об использовании bean-factories для изменения стандартного поведения отображения, но я удивлен, что это единственный способ решить эту проблему. Мне кажется, что у Dozer уже есть необходимая информация, так как он идентифицирует тип исходного кода и необычный для меня, что он попытается создать экземпляр интерфейса, заданного сигнатурой сеттера, а не тип, который он пытается отобразить.
Любые предложения?
У вас есть конфигурация дозатора, относящаяся к этому классу? – OmegaZiv