Я пытаюсь перейти с 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 на что-то подобное.