2015-04-06 86 views
3

在我們的項目中,我們有許多枚舉實現了一個特定的接口,這是一種如何控制其在數據庫中的支持。核心是一個方法getCode,它返回存儲在數據庫中的值。控制Moxy如何以通用方式序列化和反序列化枚舉

此值應由Moxy用於編組和unmarshalling。

例如,枚舉看起來如下:

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值。

我的方案,我需要莫西序列化MONDAYMON,這是可能的

  • 實現@XmlEnumValue("MON")
  • 適配器XmlAdapter<String, Weekday>

不過,我想要知道是否有可能提供更優雅的解決方案,它不需要每個枚舉的適配器,也不需要枚舉實現中的附加代碼(例如,@XmlEnumValue)。
一種透明地用於實現我的PersistableEnum接口的所有枚舉的方式。

我沒有成功執行XmlAdapter<String, PersistableEnum>,因爲我沒有該類的上下文解組;因此,我不知道使用哪個PersistableEnum。 (雖然編組部分很容易實現。)

回答

1

我不認爲這是可能的。我擔心MOXy/JAXB RI中沒有這種機制。