У меня есть отображение дозатора, которое возвращает Пользователь через пользовательский конвертер по параметру. Это работает так, как должно, но теперь этот Пользователь должен быть преобразован в Официального.
Я попытался сделать это, разрешив конвертеру вернуть пользователя и сделать еще один файл dzer xml, чтобы преобразовать пользователя в Официального. Я добавил этот xml файл в dozerfactory, но он, похоже, не вызван.
Я получаю: "Exepected Official, actual: User". Как я могу запустить файл userToOfficial.xml?
Первый файл бульдозера:
<mapping>
<class-a>be.someClass</class-a>
<class-b>be.anotherClassWithOfficial</class-b>
<field custom-converter-id="OfficialConverter">
<a>someString</a>
<b>official</b>
</field>
попытался добавить, но не работает:
<b-hint>be.Official</b-hint>
второй файл бульдозера (должен быть активирован после конвертера, но нет):
<mapping>
<class-a>be.User</class-a>
<class-b>be.Official</class-b>
<field>
<a>mail</a>
<b>email</b>
</field>
Преобразователь:
public class OfficialConverter implements CustomConverter {
/** The ldap local. */
private UserLocal userLocal;
@Override
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue,
Class < ? > destinationClass, Class < ? > sourceClass) {
if (sourceFieldValue == null) {
return null;
}
if (sourceFieldValue instanceof String) {
User user= userLocal
.getUserByLogin((String) sourceFieldValue);
return user;
}
return null;
}
public UserLocal getUserLocal() {
return userLocal;
}
public void setUserLocal(UserLocal userLocal) {
this.userLocal= userLocal;
}
}
В соответствии с вашим обычным преобразователем кажется, что вы используете сопоставление от String
to User
а теперь вместо User
вы хотите объект Offical
. Правильно? и вы хотите автоматизировать преобразование этого User
в Offical
с помощью бульдозера. Правильно? Если да, то вам нужно вызвать новый dozer в собственном конвертере, используя mapper.map()
. Ваш текущий прецедент не будет автоматически вызывать его.