Jaxb unmarshall enum с абстрактным суперклассом для Java - значение enum не сгенерировано

У меня есть стандарт веб-сервиса, которому я должен следовать, получил xsd и хочу сгенерировать классы Java. Некоторые классы с перечислениями сгенерированы правильно, но некоторые пусты и не имеют значений.

Например этот

<xsd:simpleType name = "ST_Month">
  <xsd:restriction base = "xsd:string">
     <xsd:enumeration value = "01">
        <xsd:annotation>
           <xsd:documentation xml:lang = "de">January</xsd:documentation>
        </xsd:annotation>
     </xsd:enumeration>
     <xsd:enumeration value = "02">
        <xsd:annotation>
           <xsd:documentation xml:lang = "de">February</xsd:documentation>
        </xsd:annotation>
     </xsd:enumeration>
     ...
  </xsd:restriction>
</xsd:simpleType>

генерируется правильно, чтобы

@XmlType(name = "ST_Month")
@XmlEnum
public enum STMonth {
   /**January */
   @XmlEnumValue("01")
   VALUE_1("01"),

   /** February */
   @XmlEnumValue("02")
   VALUE_2("02"),
    ...
 }

Но в некоторых перечислениях есть такие абстрактные суперклассы:

<xsd:complexType name = "STE_Country" abstract = "true">
   <xsd:simpleContent>
      <xsd:extension base = "xsd:string"/>
   </xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name = "STE_CountryBasic" final = "#all">
   <xsd:simpleContent>
      <xsd:restriction base = "dt:STE_Country">
         <xsd:enumeration value = "01">
            <xsd:annotation>
               <xsd:documentation>USA</xsd:documentation>
            </xsd:annotation>
         </xsd:enumeration>
         <xsd:enumeration value = "02">
            <xsd:annotation>
               <xsd:documentation>GERMANY</xsd:documentation>
            </xsd:annotation>
         </xsd:enumeration>
      </xsd:restriction>
   </xsd:simpleContent>
</xsd:complexType>

Результат генерации такой:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "STE_CountryBasic")
public class STECountryBasic extends STECountry
{
}

Я также добавил свой собственный complexType для MyOwnCountry со значениями страны, которые отсутствуют в STE_Country, но необходимы в моем приложении. Но сгенерированный класс - это тот же пустой результат, что и STECountryBasic.

Что мне нужно сделать, чтобы сгенерировать значения перечисления в STECountryBasic?

Кроме того, я создаю через maven с помощью cxf-codegen-plugin

Ну, STE_CountryBasic - это сложный тип с суперклассом, у перечислений не может быть суперклассов. как вы ожидаете, что он будет сгенерирован?

daniu 28.08.2018 11:13

Было бы здорово, если бы было сгенерировано «общедоступное перечисление STECountryBasic», необязательно с комментарием «относится к STECountry». А можно без смены xsd? Может с конфигом в jaxb-привязках?

Marc B 28.08.2018 11:25

Вам понадобится STE_Country для создания интерфейса, а не класса, который STE_Country затем реализует, а не расширяет. Посмотрите этот вопрос stackoverflow.com/questions/1271980/…, который требовал того же, что и IIUC.

daniu 28.08.2018 11:37

Хорошо спасибо я попробую

Marc B 28.08.2018 13:06

К сожалению, я не получил решения с работающим интерфейсом. Но я нашел способ преобразовать xsd через XSL, поэтому STE_CountryBasic выглядит как ST_Month в xsd. На втором этапе генерации создается еще один класс STE_ContryBasicValues ​​в качестве перечисления. @daniu В любом случае спасибо за ваше предложение.

Marc B 10.09.2018 09:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
71
0

Другие вопросы по теме