Как вы сериализуете свой enum?
если вы используете его таким образом, он должен работать без проблем, но вернет какой-то другой XML:
Пример:
@Root
public class Example
{
@Element
private TestStatus status = TestStatus.AVAILABLE;
// ...
}
Тест:
final File f = new File("test.xml");
Serializer ser = new Persister();
ser.write(new Example(), f);
Example m = ser.read(Example.class, f);
XML:
<example>
<status>AVAILABLE</status>
</example>
Вы можете переименовать XML-теги с аннотационными аргументами, но значение не может быть изменено.
Другое (возможное) решение - использовать пользовательский конвертер:
Аннотации перечисления:
@Root()
@Convert(TestStatusConverter.class)
public enum TestStatus
{
// ...
}
Преобразователь (пример)
public class TestStatusConverter implements Converter<TestStatus>
{
@Override
public TestStatus read(InputNode node) throws Exception
{
final String value = node.getNext("status").getValue();
// Decide what enum it is by its value
for( TestStatus ts : TestStatus.values() )
{
if( ts.getStatus().equalsIgnoreCase(value) )
return ts;
}
throw new IllegalArgumentException("No enum available for " + value);
}
@Override
public void write(OutputNode node, TestStatus value) throws Exception
{
// You can customize your xml here (example structure like your xml)
OutputNode child = node.getChild("status");
child.setValue(value.getStatus());
}
}
Тест (перечисление):
final File f = new File("test.xml");
// Note the new Strategy
Serializer ser = new Persister(new AnnotationStrategy());
ser.write(TestStatus.AVAILABLE, f);
TestStatus ts = ser.read(TestStatus.class, f);
System.out.println(ts);
Тест (класс с перечислением):
Как указано выше, но с AnnotationStrategy