2015-04-06 6 views
3

В нашем проекте у нас много перечислений, которые реализуют определенный интерфейс, который является способом управления его поддержкой в ​​базе данных. Ядром является метод getCode, который возвращает значение, которое хранится в базе данных.Управление тем, как Moxy сериализует и десериализует перечисления в общем виде

Это значение должно использоваться Moxy для сортировки и сортировки.

Например, перечисление выглядит следующим образом:

enum Weekday implements PersistableEnum<String> { 
    MONDAY("MON"), 
    // .. all the remaining days 
    ; 
    // the constructor which sets the code, etc. 

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

с помощью интерфейса PersistableEnum (упрощенный для простоты):

interface PersistableEnum<C> { 
    C getCode(); 
} 

перечисление (и все другие) поддерживается в базы данных с использованием значения code.

В моем случае, мне нужно Moxy сериализовать MONDAY в MON, что можно достичь с помощью

  • @XmlEnumValue("MON") или
  • адаптер XmlAdapter<String, Weekday>

Однако, я хотел бы знать, возможно ли предоставить более элегантное решение, которое не требует ни адаптера для каждого перечисления, ни дополнительного кода в реализации перечисления (например, @XmlEnumValue).
Способ, который прозрачно используется для всех перечислений, которые реализуют мой интерфейс PersistableEnum.

У меня не было успеха с реализацией XmlAdapter<String, PersistableEnum>, так как у меня нет контекста класса, который должен быть unmarshalled; и поэтому я не знаю, какой PersistableEnum использовать. (Маршаллинг часть легко реализовать.)

ответ

1

Не думаю, что это возможно. Я боюсь, что такого механизма в MOXy/JAXB RI нет.