将XMLBeans转换为JAXB:StringEnumAbstractBase

时间:2019-05-30 07:03:16

标签: java jaxb xjc xmlbeans

我正在尝试从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是否能够提供类似的功能。

0 个答案:

没有答案