2013-09-13 1 views
0

Я не уверен, правильно ли я понимаю пользовательский метод создания в Dozer mapper. Мне нужно перевести свойство bean типа int в экземпляр объекта TransTypeCodebook. Но я получаю:Dozer - использование настраиваемого метода создания

2013-09-13 15:47:27,009 [main] ERROR org.dozer.MappingProcessor - Field mapping error --> 
MapId: null 
Type: null 
Source parent class: cz.jaksky.dozer.a.HolderA 
Source field name: transType 
Source field type: class java.lang.Integer 
Source field value: 0 
Dest parent class: cz.jaksky.dozer.b.HolderB 
Dest field name: transTypeCodebook 
Dest field type: cz.jaksky.dozer.b.codebook.TransTypeCodebook 
org.dozer.MappingException: Illegal object type for the method 'setTransTypeCodebook'. 
Expected types: 
cz.jaksky.dozer.b.codebook.TransTypeCodebook 
Actual types: 
java.lang.String 

Моего TransTypeCodebook класс

public class TransTypeCodebook extends Codebook { 
private int code; 
private String label; 

private TransTypeCodebook(int code, String label) { 
    this.code = code; 
    this.label = label; 
} 

public int getCode() { 
    return code; 
} 

public String getLabel() { 
    return label; 
} 

public static TransTypeCodebook getCodebook(int code) { 
    TransTypeCodebook result; 

    switch (code) { 
     case 0: 
      result = new TransTypeCodebook(0, "Case0"); 
      break; 
     case 1: 
      result = new TransTypeCodebook(1, "Case1"); 
      break; 
     default: 
      result = new TransTypeCodebook(code, "Not a valid code"); 
    } 

    return result; 
} 

} 

Mapper часть

<field> 
     <a>transType</a> 
     <b create-method="getCodebook">transTypeCodebook</b> 
</field> 

Я сведущий, чтобы решить эту проблему с помощью пользовательских конвертеров, но я не уверен, если я понимаю концепцию метода пользовательского создания и многое другое. Мне интересно, откуда эта строка. Может ли кто-нибудь осветить это?

ответ

0

Я не совсем уверен, но для использования таких статических методов вам необходимо указать его полное имя.

<b create-method="your.domain.TransTypeCodebook.getCodebook">transTypeCodebook</b> 

Это указано в Dozer documentation.