2013-07-01 80 views
8

隨着我的數據模型(基本上是一個帶有父項子項的樹),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>() 

這是一個相同的級映射,雖然推土機正確地標識在源類的父字段爲類型數據倉庫的,因爲其父Module類的集方法使用模型接口作爲其參數,它似乎試圖實例化Model的類型,因爲Model是一個沒有構造函數的接口,而不是Datawarehouse,因爲它是源類字段指示的。

我知道如何使用bean-factories來改變標準的映射行爲,但我很驚訝這是解決這個問題的唯一方法。在我看來,Dozer已經擁有了它所需要的信息,因爲它標識了源類的類型,對我來說它不尋常,它會嘗試實例化由setter的簽名指定的接口,而不是它試圖映射的類型。

有什麼建議嗎?

+3

您是否有與此類相關的推土機配置? – OmegaZiv

回答

2

您可以通過在推土機xml配置中使用推土機a-hint和b-hint標籤來解決此問題。指定哪個類shoukd推土機安裝而不是界面。