Я пытался сопоставить простой тип с ограничениями по шаблону

<xs:simpleType name="exampleType">
    <xs:restriction base="xs:string">
        <xs:pattern value="\d{3,6}"/>
    </xs:restriction>
</xs:simpleType>

В класс перечисления (со значениями, основанными на каком-либо документе спецификации):

<jaxb:bindings node="//xs:simpleType[@name='ExampleType']">
  <jaxb:typesafeEnumClass name="EnumExample">
    <jaxb:typesafeEnumMember value="1" name="description_1" />
    ....
  </jaxb:typesafeEnumClass>
</jaxb:bindings>

Но получил

com.sun.istack.SAXParseException2: enum class customization is specified on a type that has no enumeration facet.

Это или что-то подобное возможно как-то?

0
Reto Höhener 11 Ноя 2022 в 12:32
Ваш шаблон допускает почти 10 миллионов различных значений для exampleType. Я не понимаю, почему вы хотите рассматривать этот тип как перечисление.
 – 
kimbert
17 Ноя 2022 в 12:41
Имеется документ спецификации, описывающий возможные значения
 – 
Reto Höhener
17 Ноя 2022 в 15:17
10 миллионов? ""\d{3,6}" (от 3 до 6 цифр) звучит для меня как 1000 значений. Тем не менее, это не подходит для перечисления.
 – 
Christoph Dahlen
17 Ноя 2022 в 18:13
Это сценарий реального мира. у нас нет контроля над схемой. документация определяет 6 возможных значений, поэтому я хотел бы иметь перечисление.
 – 
Reto Höhener
18 Ноя 2022 в 10:33
1
Не связано, но я считаю, что количество возможных значений для \d{3,6} равно 10^3 + 10^4 + 10^5 + 10^6
 – 
Reto Höhener
18 Ноя 2022 в 18:59

2 ответа

Ваш тип данных допускает только 6 значений. Вместо использования xs:pattern вы должны использовать xs:enumeration. Вы не указали значения, поэтому я привел некоторые значения в качестве примера:

<xs:simpleType name="exampleType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="100"/>
        <xs:enumeration value="2000"/>
        <xs:enumeration value="30000"/>
        <xs:enumeration value="400000"/>
        <xs:enumeration value="100001"/>
        <xs:enumeration value="999999"/>
    </xs:restriction>
</xs:simpleType>
0
kimbert 18 Ноя 2022 в 17:25
Как я уже сказал, у нас нет контроля над схемой. мы получаем схему и документы и должны генерировать достоверные данные.
 – 
Reto Höhener
18 Ноя 2022 в 18:06

Вместо того, чтобы позволять JAXB генерировать перечисление на основе значений перечисления XSD, представляется возможным сопоставить собственный класс перечисления:

<jaxb:bindings node="//xs:simpleType[@name='customType']">
  <jaxb:class ref="com.package.EnumCustom" />
</jaxb:bindings>

Вручную написано:

@XmlType(name = "")
@XmlEnum
public enum EnumCustom {
  @XmlEnumValue("111")    VALUE_A,
  @XmlEnumValue("111222") VALUE_B,
  ...
  ;
}
0
Reto Höhener 18 Ноя 2022 в 18:39