Con il mio modello di dati, che è fondamentalmente un albero con i figli dei genitori, Dozer ha problemi a mapparli correttamente mentre interpreta un campo (che usa un tipo di interfaccia come parametro) come essere una classe e provare a creare un'istanza con un costruttore. Ciò si traduce nella seguente eccezione;Dozer tenta di associare una classe alla sua interfaccia
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>()
Questa è una mappatura stessa classe, e mentre Dozer identifica correttamente il campo principale della classe fonte come essendo di tipo Datawarehouse, perché il metodo set sulla classe Module per suo genitore utilizza l'interfaccia modello come parametro, sembra stia tentando di istanziare il tipo di Modello, che naturalmente fallisce in quanto Model è un'interfaccia senza costruttore, piuttosto che Datawarehouse, come indica il campo della classe sorgente.
So di utilizzare bean-factories per modificare il comportamento di mappatura standard, ma sono sorpreso che questo sarebbe l'unico modo per risolvere questo problema. Mi sembra che Dozer abbia già le informazioni di cui ha bisogno dal momento che identifica il tipo di classe di origine, e inusuale per me che proverà a istanziare l'interfaccia specificata dalla firma del setter piuttosto che il tipo che sta tentando di mappare.
Qualche suggerimento?
Avete la configurazione di Dozer relativa a questa classe? – OmegaZiv