Предположим, у меня есть:
- ObjectWithList , ListWrapper и ObjectWithWrapper классы, подобные этим:
//com.github.komidawi.ObjectWithList
public class ObjectWithList {
private List<String> list;
// ...
}
//com.github.komidawi.ListWrapper
public class ListWrapper {
private List<String> wrappedList;
// ...
}
//com.github.komidawi.ObjectWithWrapper
public class ObjectWithWrapper {
private ListWrapper list;
// ...
}
MyCustomConverter класс, чтобы обернуть / развернуть эти списки.
mapperConfiguration. xml файл конфигурации
<!-- ... -->
<configuration>
<stop-on-errors>true</stop-on-errors>
<wildcard>true</wildcard>
<custom-converters>
<converter type="com.github.komidawi.MyCustomConverter">
<class-a>com.github.komidawi.ListWrapper</class-a>
<class-b>java.util.List</class-b>
</converter>
</custom-converters>
</converter>
<mapping>
<class-a>com.github.komidawi.ObjectWithList</class-a>
<class-b>com.github.komidawi.ObjectWithWrapper</class-b>
</mapping>
И я хочу сопоставить ObjectWithWrapper с ObjectWithList :
// ... creating objects
ObjectWithList objectWithList = mapper.map(objectWithWrapper, ObjectWithList.class);
objectWithList.getList(); // This is null
К сожалению, после сопоставления список поле objectWithList равно ноль . Я использовал отладчик, и Dozer даже не вводит MyCustomConverter в этом случае.
Удивительно, но отображение в разных направлениях работает нормально:
ObjectWithWrapper objecthWithWrapper = mapper.map(objectWithList, ObjectWithWrapper.class);
objecthWithWrapper.getList(); // This is not null
Подведение итогов :
- Имя поля одинаково как в ObjectWithList и ObjectWithWrapper : список
- Я указал пользовательский конвертер для Java List и ListWrapper в xml file
- Я указал отображение между ObjectWithList и ObjectWithWrapper в xml файле
- В обоих случаях Dozer говорит: "Успешно загруженные пользовательские xml сопоставления из URL"
- При сопоставлении из ObjectWithList до ObjectWithWrapper он отлично работает
И проблема:
После сопоставления objectWithList имеет null вместо фактического списка. Я заметил, что он даже не входит MyCustomConverter