Orika を使用してList<...>
、 List タイプが別のオブジェクトである を含む 2 つのオブジェクト間をマップしようとしていますが、mapperFactory.classMap(...)
Orika でマッピング構成のさまざまな順列を試しても、プログラムを実行すると例外がスローされます。
http://orika-mapper.github.io/orika-docs/mappings-via-classmapbuilder.htmlを見ると、マッピング a の構文List
はparentProperty{childProperty}
.
この質問のために、マップしようとしているオブジェクトを単純化しました。ソース オブジェクトはToDoTaskListEntity
で、宛先オブジェクトはToDoTaskListDTO
です。ソース オブジェクトには次のようにToDoItemEntity
定義されたリストがList<ToDoItemEntity>
含まれ、宛先オブジェクトには次のように定義された対応するリストが含まれます。List<ToDoItemDTO>
私の質問は、子オブジェクトがそれぞれの親オブジェクト内にもマップされるように、ToDoTaskListEntity
との間で Orika のマッピング構成をどのように定義すればよいですか?ToDoTaskListDTO
List<ToDoItemEntity>
List<ToDoItemDTO>
私のマッピング構成のコードは次のとおりです。
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(ToDoItemEntity.class, ToDoItemDTO.class)
.field("id", "id")
.field("description", "description")
.field("status", "status")
.byDefault()
.register();
mapperFactory.classMap(ToDoTaskListEntity.class, ToDoTaskListDTO.class)
.field("listName", "listName")
.field("toDoItems{id}", "toDoItems{id}")
.field("toDoItems{description}", "toDoItems{description}")
.field("toDoItems{status}", "toDoItems{status}")
.byDefault()
.register();
マッピングを呼び出すコードは次のとおりです。
MapperFacade mapper = mapperFactory.getMapperFacade();
ToDoTaskListDTO toDoTaskListDTO = mapper.map(toDoTaskListEntity, ToDoTaskListDTO.class);
ソース オブジェクトのコードは次のとおりです。
public class ToDoTaskListEntity {
private String ListName;
private List<ToDoItemEntity> toDoItems;
// Getters and setters
}
public class ToDoItemEntity {
private int id;
private String description;
private Status status;
// Getters and setters
}
私の宛先オブジェクトのコードは次のとおりです。
public class ToDoTaskListDTO {
private String listName;
private List<ToDoItemDTO> toDoItems;
public ToDoTaskListDTO(String listName, List<ToDoItemDTO> toDoItems) {
this.listName = listName;
this.toDoItems = toDoItems;
}
//Getters but no setters
}
public class ToDoItemDTO {
private int id;
private String description;
private Status status;
public ToDoItemDTO(int id, String description, Status status) {
this.id = id;
this.description = description;
this.status = status;
}
// Getters but no setters
}
Orika がスローする例外は次のとおりです。
Exception in thread "main" ma.glasnost.orika.MappingException: exception while creating object factory for test.orikademo.ToDoTaskListDTO
-----begin dump of current state-----------------------------
Registered object factories: 1 (approximate size: 25.4 kB)
[ToDoTaskListDTO] : {}
-------------------------------------------------------------
Registered mappers: 2 (approximate size: 961.5 kB)
[0] : GeneratedMapper<ToDoItemEntity, ToDoItemDTO> {usedConverters: [], usedMappers: [], usedMapperFacades: [], usedTypes: [] }
[1] : GeneratedMapper<ToDoTaskListEntity, ToDoTaskListDTO> {usedConverters: [], usedMappers: [], usedMapperFacades: [DefaultBoundMapperFacade<ToDoItemEntity, ToDoItemDTO>], usedTypes: [List<ToDoItemEntity>, List<ToDoItemDTO>] }
-------------------------------------------------------------
Registered concrete types: 5 (approximate size: 122.4 kB)
[interface java.util.List] : ArrayList<Object>
[interface java.util.Set] : LinkedHashSet<Object>
[interface java.util.Collection] : ArrayList<Object>
[interface java.util.Map$Entry] : MapEntry<Object, Object>
[interface java.util.Map] : LinkedHashMap<Object, Object>
-------------------------------------------------------------
Resolved strategies: 0 (approximate size: 0.8 kB)
-------------------------------------------------------------
Unenhance strategy: ma.glasnost.orika.unenhance.BaseUnenhancer@292a74d5
-----end dump of current state-------------------------------
at ma.glasnost.orika.impl.generator.ObjectFactoryGenerator.build(ObjectFactoryGenerator.java:110)
at ma.glasnost.orika.impl.DefaultMapperFactory.lookupObjectFactory(DefaultMapperFactory.java:1005)
at ma.glasnost.orika.impl.DefaultMapperFactory.lookupObjectFactory(DefaultMapperFactory.java:925)
at ma.glasnost.orika.impl.MapperFacadeImpl.resolveMappingStrategy(MapperFacadeImpl.java:218)
at ma.glasnost.orika.impl.MapperFacadeImpl.map(MapperFacadeImpl.java:734)
at ma.glasnost.orika.impl.MapperFacadeImpl.map(MapperFacadeImpl.java:714)
at test.orikademo.App.main(App.java:54)
Caused by: java.lang.NullPointerException
at ma.glasnost.orika.impl.generator.ObjectFactoryGenerator.addSourceClassConstructor(ObjectFactoryGenerator.java:173)
at ma.glasnost.orika.impl.generator.ObjectFactoryGenerator.addCreateMethod(ObjectFactoryGenerator.java:124)
at ma.glasnost.orika.impl.generator.ObjectFactoryGenerator.build(ObjectFactoryGenerator.java:95)
... 6 more