2013-07-01 13 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>() 

これは、同じクラスのマッピングであり、その親のためのモジュールクラスのセット方法は、そのようにモデルインタフェースを使用するためドーザが正しく、型データウェアハウスであるように、ソースクラスに親フィールドを識別するけれどもパラメータでは、モデルの型をインスタンス化しようとしているようですが、ソースクラスのフィールドが示すように、モデルはDatawarehouseではなくコンストラクタを持たないインタフェースです。

標準的なマッピング動作を変更するためにBeanファクトリを使用することについては知っていますが、これがこの問題を解決する唯一の方法であると私は驚いています。 Dozerは、ソースクラスの型を識別するために必要な情報を既に持っていると思われます。マップしようとしている型ではなく、setterの署名で指定されたインタフェースをインスタンス化しようとします。

提案がありますか?

+3

このクラスに関連するドーザー設定はありますか? – OmegaZiv

答えて

2

dozer xml構成でdozer a-hintタグとb-hintタグを使用することで、この問題を解決できます。インタフェースの代わりに、どのクラスのクラスを指定するか。