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

これは同一クラスのマッピングであり、Dozer はソース クラスの親フィールドを Datawarehouse 型として正しく識別しますが、その親の Module クラスの set メソッドは Model インターフェイスをパラメーターとして使用するため、試行しているように見えます。ソースクラスフィールドが示すように、モデルはデータウェアハウスではなくコンストラクターのないインターフェイスであるため、もちろん失敗します。

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

助言がありますか?

4

1 に答える 1