0

NullPointerExceptionいくつかのコンテナー管理オブジェクトでカスタム マッパーを作成してマッピングを追加しようとすると、エラーが発生します。@Stateless EJB サービスと @RequestScoped レスト サービスで試してみました。エラーは同様で、次の行で発生します。

modelMapper.addMappings(skipCdeMap);

バグですか?マッパーがマネージド Bean で何らかのリフレクションを実行しようとしていると想定しているため、 get NullPointerException.

これは私のコードです:

PropertyMap<ObjectAbcDto, ObjectAbc> skipCdeMap =
    new PropertyMap<ObjectAbcDto, ObjectAbc>() {
        protected void configure() {
            skip().setObjectCde(null);
        }
    };

modelMapper.addMappings(skipCdeMap);

これはエラーです:

13:37:03,453 ERROR [stderr] (default task-12) org.modelmapper.ConfigurationException: ModelMapper configuration errors:
13:37:03,453 ERROR [stderr] (default task-12) 
13:37:03,453 ERROR [stderr] (default task-12) 1) Error reading class com.app.SomeRestEasyService$1
13:37:03,453 ERROR [stderr] (default task-12) 
13:37:03,453 ERROR [stderr] (default task-12) 2) Failed to configure mappings
13:37:03,454 ERROR [stderr] (default task-12) 
13:37:03,454 ERROR [stderr] (default task-12) 2 errors
13:37:03,454 ERROR [stderr] (default task-12) at org.modelmapper.internal.Errors.throwConfigurationExceptionIfErrorsExist(Errors.java:241)
13:37:03,454 ERROR [stderr] (default task-12) at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:206)
13:37:03,454 ERROR [stderr] (default task-12) at org.modelmapper.internal.TypeMapImpl.addMappings(TypeMapImpl.java:72)
13:37:03,454 ERROR [stderr] (default task-12) at org.modelmapper.internal.TypeMapStore.getOrCreate(TypeMapStore.java:101)
13:37:03,454 ERROR [stderr] (default task-12) at org.modelmapper.ModelMapper.addMappings(ModelMapper.java:93)
13:37:03,454 ERROR [stderr] (default task-12) at com.app.SomeRestEasyService.create(SomeRestEasyService.java:129)
13:37:03,454 ERROR [stderr] (default task-12) at com.app.SomeRestEasyService$Proxy$_$$_WeldClientProxy.create(Unknown Source)        
[...]   
13:37:03,459 ERROR [stderr] (default task-12) Caused by: java.lang.NullPointerException
13:37:03,459 ERROR [stderr] (default task-12) at org.modelmapper.internal.ExplicitMappingBuilder.validateVisitedMappings(ExplicitMappingBuilder.java:236)
13:37:03,459 ERROR [stderr] (default task-12) at org.modelmapper.internal.ExplicitMappingBuilder.visitPropertyMap(ExplicitMappingBuilder.java:227)
13:37:03,459 ERROR [stderr] (default task-12) at org.modelmapper.PropertyMap.configure(PropertyMap.java:380)
13:37:03,459 ERROR [stderr] (default task-12) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
13:37:03,459 ERROR [stderr] (default task-12) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
13:37:03,459 ERROR [stderr] (default task-12) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
13:37:03,460 ERROR [stderr] (default task-12) at java.lang.reflect.Method.invoke(Method.java:606)
13:37:03,460 ERROR [stderr] (default task-12) at org.modelmapper.internal.ExplicitMappingBuilder.build(ExplicitMappingBuilder.java:194)
13:37
4

2 に答える 2

3

Stringにマップしようとして、(ModelMapper v0.7.5 を使用して) 同じ問題が発生していUUIDます。

たとえば、次のクラスがあります。

public class Car {

    private UUID id;

    // other fields

}

public class CarDto {

    private String id;

    // other fields

}

そして、次のようなカスタム マッピングを設定しようとしています。

mapper.addMappings(new PropertyMap<CarDto, Car>() {
        protected void configure() {
            map().setId(UUID.fromString(source.getId()));
            // other mappings
        }
    });

同じ構成エラーが発生します。

原因は、それUUIDが最終クラスであり、ModelMapper フレームワークによってプロキシできないことです。

Car回避策として、クラスで次のようなメソッドを作成しました。

public void setIdAsString(String id) {
    this.id = UUID.fromString(id);
}
于 2016-04-12T10:57:54.380 に答える
3

私は自分の質問に答えることができます。私の仮定は正しかった。Pojo または独自の専用クラスで PropertyMap クラスを作成すると、マッピングがうまく機能しました。したがって、以前のエラーは、PropertyMap が作成されたクラスに対して ModelMapper が行うリフレクションが原因で発生したと思います。NullPointerException が発生する Menaged Bean の場合。

于 2014-10-07T23:09:39.270 に答える