我正在尝试从XMLBeans迁移到JAXB。迁移时,我注意到XSD中的一些枚举无需费力即可生成枚举,而JAXB依赖精心设计的绑定文件。 XMLBeans并生成称为:
StringEnumAbstractBase
或多或少是枚举值的整数表示。我当前的代码充分利用了这一点。我在XMLbeans中反编译了生成的类,枚举部分的定义如下所示:
public static abstract interface OperationalValues extends XmlString {
.
.
.
.
.
public static final Enum VALUE1 = Enum.forString("value1");
public static final Enum VALUE2 = Enum.forString("value2");
public static final Enum VALUE3 = Enum.forString("value3");
public static final Enum NOVALUE = Enum.forString("novalue");
public static final int INT_VALUE1 = 1;
public static final int INT_VALUE2 = 2;
public static final int INT_VALUE3 = 3;
public static final int INT_NOVALUE = 4;
public abstract StringEnumAbstractBase enumValue();
public abstract void set(StringEnumAbstractBase paramStringEnumAbstractBase);
public static final class Factory {
public static Expression.OperationalValues newValue(Object paramObject) {
return (Expression.OperationalValues) Expression.OperationalValues.type.newValue(paramObject);
}
public static Expression.OperationalValues newInstance() {
return (Expression.OperationalValues) XmlBeans.getContextTypeLoader().newInstance(Expression.OperationalValues.type,
null);
}
public static Expression.OperationalValues newInstance(XmlOptions paramXmlOptions) {
return (Expression.OperationalValues) XmlBeans.getContextTypeLoader().newInstance(Expression.OperationalValues.type,
paramXmlOptions);
}
}
public static final class Enum extends StringEnumAbstractBase {
static final int INT_VALUE1 = 1;
static final int INT_VALUE2 = 2;
static final int INT_VALUE3 = 3;
static final int INT_NOVALUE = 4;
public static final StringEnumAbstractBase.Table table = new StringEnumAbstractBase.Table(
new Enum[]{new Enum("value1", 1), new Enum("value2", 2), new Enum("value3", 3), new Enum("novalue", 4)});
private static final long serialVersionUID = 1L;
public static Enum forString(String paramString) {
return (Enum) table.forString(paramString);
}
public static Enum forInt(int paramInt) {
return (Enum) table.forInt(paramInt);
}
private Enum(String paramString, int paramInt) {
super(paramInt);
}
private Object readResolve() {
return forInt(intValue());
}
}
}
我没有看到在构建脚本中完成的任何特定配置,也没有使XMLBeans以这种方式生成枚举的任何操作。
但是现在我的问题是,JAXB是否具有任何我可以放入绑定文件中的类似功能来替换。我所能管理的只是来自XSD枚举中的字符串。我将不得不重做代码,这并不太麻烦,但是很高兴发现JAXB是否能够提供类似的功能。