Рассмотрим приведенный ниже пример.
Group.java(GroupDTO.java также имеет те же свойства)
import java.util.List;
public class Group {
public Group(List<Person> persons) {
this.persons = persons;
}
private List<Person> persons;
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
}
Person.java(PersonDTO.java также имеет те же свойства)
import java.util.List;
public class Person {
public Person(){}
public Person(List<Name> names, Integer age) {
this.names = names;
this.age = age;
}
private List<Name> names;
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<Name> getNames() {
return names;
}
public void setNames(List<Name> names) {
this.names = names;
}
}
Name.java(NameDTO.java также имеет те же свойства)
public class Name {
public Name(String first, String last) {
this.first = first;
this.last = last;
}
private String first;
private String last;
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
И когда я запускаю класс ниже, я получаю следующее исключение.
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.metadata.ClassMapBuilder;
import java.util.LinkedList;
import java.util.List;
public class Mapper {
public static void main(String[] args) {
List<Name> names = new LinkedList<Name>();
names.add(new Name("foo", "bar"));
names.add(new Name("lorem", "ipsum"));
List<Person> persons = new LinkedList<Person>();
persons.add(new Person(names, 30));
persons.add(new Person(names, 40));
Group g1 = new Group(persons);
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
ClassMapBuilder classMapBuilder = mapperFactory.classMap(Group.class, GroupDTO.class);
classMapBuilder.field("persons{age}", "persons{age}");
classMapBuilder.field("persons{names{first}}", "persons{names{first}}");
classMapBuilder.field("persons{names{last}}", "persons{names{last}}");
classMapBuilder.byDefault().register();
MapperFacade mapper = mapperFactory.getMapperFacade();
GroupDTO groupDTO = mapper.map(g1, GroupDTO.class);
for(Person p:groupDTO.getPersons()){
System.out.println(p.getAge());
for(Name n:p.getNames()){
System.out.println(n.getFirst());
System.out.println(n.getFirst());
}
}
}
}
Исключение
Exception in thread "main" ma.glasnost.orika.MappingException: java.lang.NullPointerException
at ma.glasnost.orika.impl.generator.MapperGenerator.build(MapperGenerator.java:104)
at ma.glasnost.orika.impl.DefaultMapperFactory.buildMapper(DefaultMapperFactory.java:1480)
at ma.glasnost.orika.impl.DefaultMapperFactory.build(DefaultMapperFactory.java:1295)
at ma.glasnost.orika.impl.DefaultMapperFactory.getMapperFacade(DefaultMapperFactory.java:883)
at Mapper.main(Mapper.java:28)
Caused by: java.lang.NullPointerException
at ma.glasnost.orika.impl.generator.specification.MultiOccurrenceToMultiOccurrence.registerClassMaps(MultiOccurrenceToMultiOccurrence.java:397)
at ma.glasnost.orika.impl.generator.specification.MultiOccurrenceToMultiOccurrence.generateMappingCode(MultiOccurrenceToMultiOccurrence.java:72)
at ma.glasnost.orika.impl.generator.SourceCodeContext.mapAggregateFields(SourceCodeContext.java:721)
at ma.glasnost.orika.impl.generator.MapperGenerator.addMapMethod(MapperGenerator.java:182)
at ma.glasnost.orika.impl.generator.MapperGenerator.build(MapperGenerator.java:70)
... 4 more
Извините за длинный пост. Я пытаюсь сопоставить поля из списка‹>, который снова находится внутри другого списка‹>. Что было бы лучшим подходом или я делаю что-то не так здесь?