I\'m using XStream to serialize some objects to XML, and am facing a problem with Enums. The exception I get when I try to serialize the object: \"ObjectAccessException: inv
You can just register EnumConverter() from xstream package.
xml.registerConverter(new EnumConverter());
Pintac's answer still contains a bug. It still does not use the name() method, according to Java spec. After a thread at XStream mailing list, the bug was fixed in any release greater 1.3.1. Please see the thread "Enum on Android" at the mailing list.
The fixed version:
class FixedEnumSingleValueConverter extends EnumSingleValueConverter {
FixedEnumSingleValueConverter(Class eType) {
super(eType);
}
public toString(Object obj) {
return Enum.class.cast(obj).name();
}
}
xstream.registerConverter(new FixedEnumSingleValueConverter(Sample.class));
It was from the developer of XStream.
The only way i could find to get around this is to create a AbstractSingleValueConverter for enums and then register it with xstream.
public class SingleValueEnumConverter extends AbstractSingleValueConverter
{
private final Class enumType;
public SingleValueEnumConverter(Class type)
{
this.enumType = type;
}
public boolean canConvert(Class c)
{
return c.equals(enumType);
}
public Object fromString(String value)
{
return Enum.valueOf(enumType, value);
}
}
Use
XStream xml = new XStream();
xml.registerConverter(new SingleValueEnumConverter([ENUM].class));