Ответ 1
Не уверен, что это все еще проблема, но, возможно, поможет любому, кто ищет. Но здесь реализовано решение:
@Override
public Object convert(Object destination, Object source, Class<?> destinationClass, Class<?> sourceClass) {
if(source == null)
return null;
if(destinationClass != null){
if(destinationClass.getSimpleName().equalsIgnoreCase("String")){
return this.getString(source);
}else if( destinationClass.isEnum()){
return this.getEnum(destinationClass, source);
}else{
throw new MappingException(new StrBuilder("Converter ").append(this.getClass().getSimpleName())
.append(" was used incorrectly. Arguments were: ")
.append(destinationClass.getClass().getName())
.append(" and ")
.append(source).toString());
}
}
return null;
}
private Object getString(Object object){
String value = object.toString();
return value;
}
private Object getEnum(Class<?> destinationClass, Object source){
Object enumeration = null;
Method [] ms = destinationClass.getMethods();
for(Method m : ms){
if(m.getName().equalsIgnoreCase("valueOf")){
try {
enumeration = m.invoke( destinationClass.getClass(), (String)source);
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
return enumeration;
}
}
return null;
}
Класс StrBuilder при построении сообщения об исключении - это файлы apache common-lang. Но кроме этого простое размышление для решения этой проблемы. Просто добавьте к классу, который реализует CustomConverter, а затем в вашем файле XML файла для сортировки бульдозера добавьте следующую конфигурацию:
<configuration>
<custom-converters>
<converter type="com.yourcompany.manager.utils.dozer.converters.EnumStringBiDirectionalDozerConverter">
<class-a>java.lang.Enum</class-a>
<class-b>java.lang.String</class-b>
</converter>
</custom-converters>
</configuration>
Обратите внимание, что вы можете только перечислить конфигурацию один раз между всеми вашими файлами сопоставления (если у вас их несколько), иначе бульдозер будет жаловаться. Что я обычно делаю, так это то, что для упрощения настройки конфигурации пользовательского конвертера в одном файле. Надеюсь, это поможет!