Xstream 和枚举解组:没有枚举常量

LB4*_*B40 5 java xml enums xstream

这是我要解析的 XML 的摘录:

<node version="1.0.7" errorCode="0" message="">
Run Code Online (Sandbox Code Playgroud)

errorCode 实际上是一组固定的常量,所以我认为将它表示为 enum 是个好主意:

public enum ErrorCode {
 OK (0,"ok"),
 ERR (1,"Error"),
 BIGERR (2,"Big Error");

 private int code;

 private String name;

 ErrorCode(int code, String name) {...}
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用枚举中定义的各种常量映射 xml 文件中的“0”......我不断收到没有枚举常量的转换异常:

com.thoughtworks.xstream.converters.ConversionException: No enum constant my.package.ErrorCode.0
Run Code Online (Sandbox Code Playgroud)

我不知道如何为这些值指定别名......(或者如果我必须实现我自己的转换器。)。

谢谢..

dte*_*oli 1

我遇到了同样的问题,我通过创建 Converter 类解决了它。

public class MyEnumConverter implements Converter {

    public static MyEnumConverter getInstance() {
    return new MyEnumConverter();
    }

    public void marshal(Object value, HierarchicalStreamWriter writer,
            MarshallingContext context) {
         writer.setValue(((MyEnum) value).name());
    }

    //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);
    }
}
Run Code Online (Sandbox Code Playgroud)

不要忘记注册转换器

xstream.registerConverter(MyEnumConverter.getInstance());
Run Code Online (Sandbox Code Playgroud)