XMLBeans для JAXB: StringEnumAbstractBase - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь перейти с XMLBeans на JAXB. Во время миграции я заметил, что некоторые перечисления в XSD генерируют перечисления без каких-либо усилий, в то время как JAXB зависит от сложных файлов привязки. XMLBeans, а также генерировать что-то под названием:

StringEnumAbstractBase

Что является более или менее целочисленным представлением значений перечисления. Мой текущий код полностью использует это. Я декомпилировал сгенерированный класс в XMLbeans, и определение раздела enum выглядит примерно так:

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 на что-то подобное.

...