推土机试图将类映射到其界面

时间:2013-07-01 09:16:04

标签: java interface mapping 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>()

这是一个相同类的映射,而Whilst Dozer正确地将源类上的父字段标识为Datawarehouse类型,因为其父类的Module类上的set方法使用Model接口作为其参数,似乎尝试实例化模型的类型,当然模型是一个没有构造函数的接口,而不是Datawarehouse,因为源类字段表示。

我知道使用bean-factory来改变标准的映射行为,但我很惊讶这是解决这个问题的唯一方法。在我看来,Dozer已经拥有了它所需的信息,因为它识别了源类类型,并且我不同意它会尝试实例化setter签名指定的接口而不是它试图映射的类型。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以通过在dozer xml配置中使用dozer a-hint和b-hint标记来解决此问题。指定哪个类应该dozer实例化而不是接口。