这是XML的摘录我想解析:
<node version="1.0.7" errorCode="0" message="">
errorCode实际上是一组固定的常量,所以我认为将它表示为枚举是个好主意:
public enum ErrorCode {
OK (0,"ok"),
ERR (1,"Error"),
BIGERR (2,"Big Error");
private int code;
private String name;
ErrorCode(int code, String name) {...}
}
我不知道如何映射&#34; 0&#34;从我的枚举中定义的各种常量的xml文件... 我继续获得没有枚举常量的转换异常:
com.thoughtworks.xstream.converters.ConversionException: No enum constant my.package.ErrorCode.0
我不知道如何为值指定别名...(或者如果我必须实现自己的转换器。)。
谢谢..
答案 0 :(得分:3)
我使用EnumToStringConverter
完成了这项工作Map<String, ErrorCode> map = new HashMap<>();
map.put(ErrorCode.OK.getCode(), Error.OK);
map.put(ErrorCode.ERR.getCode(), Error.ERR);
map.put(ErrorCode.BIGERR.getCode(), Error.BIGERR);
xstream.registerConverter(new EnumToStringConverter<>(ErrorCode.class, map);
答案 1 :(得分:1)
我遇到了同样的问题,我通过创建一个Converter类来解决它。
public class MyEnumConverter implements Converter {
public static MyEnumConverter getInstance() {
return new MyEnumConverter();
}
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
context.convertAnother(value, new EnumConverter());
}
//method that return the enum value by string
//if value equals return the correct enum value
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
return MyEnum.get(reader.getValue()); //method get implemented in enum
}
@SuppressWarnings("rawtypes")
public boolean canConvert(Class clazz) {
return MyEnum.class.isAssignableFrom(clazz);
}
}
不要忘记注册转换器
xstream.registerConverter(MyEnumConverter.getInstance());