Dozer String to enum mapping

У меня есть такой enum:

public enum PartnershipIndicator {
    VENDOR("VENDOR"), COPARTNER("COPARTNER"), BUYER("BUYER");

    String code;

    private PartnershipIndicator(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public static PartnershipIndicator valueOfCode(String code) {
        for (PartnershipIndicator status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException(
            "Partnership status cannot be resolved for code " + code);
    }

    @Override
    public String toString() {
        return code;
    }
}

Мне нужно преобразовать его в String и наоборот. Сейчас это делается с помощью пользовательского конвертера. Но я хочу сделать это через dozer mappings (если это возможно). Если я не записываю никаких маппингов в конфиг dozer, то получаю

org.dozer.MappingException: java.lang.NoSuchMethodException: by.dev.madhead.demo.test_java.model.PartnershipIndicator.<init>()

исключение. Я не могу добавить публичный конструктор по умолчанию к перечислению, так как это невозможно. Поэтому я написал трюк с внутренним кодом и valueOfCode() / toString(). Это не работает. Затем я отобразил его в конфиге dozer:

<mapping>
    <class-a>java.lang.String</class-a>
    <class-b create-method="valueOfCode">by.dev.madhead.demo.test_java.model.PartnershipIndicator</class-b>
</mapping>

Не работает. Я пробовал valueOfCode(), одностороннее отображение. Ничего не работает. Конвертация Enum в String тоже не работает, я получаю пустые строки. Есть идеи?

16
задан madhead 25 November 2011 в 10:14
поделиться