2013-07-01 14 views
8

Z moim modelem danych, który jest w zasadzie drzewem z rodzicami potomnymi, Dozer ma problemy z powodzeniem mapując je, interpretując pole (które używa typu interfejsu jako parametru) jako będąc klasą i próbując utworzyć instancję za pomocą konstruktora. Powoduje to następujący wyjątek;Spychacz próbujący odwzorować klasę na jej interfejs

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>() 

To jest odwzorowaniem tej samej klasy, a ile spycharek poprawnie identyfikuje pole dominującej w klasie źródłowego jako typu DataWarehouse, ponieważ metoda zestaw od klasy dla jego rodzica Moduł wykorzystuje interfejs modelu jako jego parametr wydaje się być próbą utworzenia typu Modelu, co oczywiście kończy się niepowodzeniem, ponieważ Model jest interfejsem bez konstruktora, a nie Datawarehouse, jak wskazuje pole klasy źródłowej.

Wiem o używaniu fabryk fasoli do zmiany standardowych zachowań mapowania, ale jestem zaskoczony, że to byłby jedyny sposób, aby rozwiązać ten problem. Wydaje mi się, że Dozer ma już potrzebne informacje, ponieważ identyfikuje typ klasy źródłowej, i nietypowe dla mnie, że spróbuje utworzyć instancję interfejsu określonego przez sygnaturę settera, a nie typ, który próbuje odwzorować.

Wszelkie sugestie?

+3

Czy masz konfigurację spychacza powiązaną z tą klasą? – OmegaZiv

Odpowiedz

2

Możesz rozwiązać ten problem za pomocą tagów a-hint i b-hint dozer w konfiguracji dozer xml. Określanie, która klasa instuuje insta lator zamiast interfejsu.

Powiązane problemy