提交 76e9df11 编写于 作者: K kohsuke

fixed a data file format problem with retroweaver enum class.


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@979 71c3de6d-444a-0410-be80-ed276b4c234a
上级 c7a31a75
......@@ -10,9 +10,14 @@ import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
/**
* Converts retroweaver's enum class.
*
* <p>
* Hudson &lt; 1.60 used to store retroweaver's {@link Enum_} class as-is,
* which was incompatible with how it handles enums in JDK1.5. This converter
* makes sure that we use the same data format.
*
* @author Kohsuke Kawaguchi
*/
public class EmulatedEnumConverter implements Converter {
public class RetroweaverEnumConverter implements Converter {
public boolean canConvert(Class type) {
return Enum_.class.isAssignableFrom(type);
......@@ -27,7 +32,26 @@ public class EmulatedEnumConverter implements Converter {
if (type.getSuperclass() != Enum_.class) {
type = type.getSuperclass(); // polymorphic enums
}
return Enum_.valueOf(type, reader.getValue());
}
String value = reader.getValue();
if(value==null || value.trim().length()==0) {
/*
backward compatibility mode. read from:
<mode>
<description>Leave this machine for tied jobs only</description>
<ordinal>1</ordinal>
<name>EXCLUSIVE</name>
</mode>
*/
while(reader.hasMoreChildren()) {
reader.moveDown();
if(reader.getNodeName().equals("name"))
value = reader.getValue();
reader.moveUp();
}
}
return Enum_.valueOf(type, value);
}
}
......@@ -34,5 +34,6 @@ public class XStream2 extends XStream {
private void init() {
registerConverter(new RobustCollectionConverter(getClassMapper()),10);
registerConverter(new RetroweaverEnumConverter(),10);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册