У меня есть стандарт веб-сервиса, которому я должен следовать, получил 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
Было бы здорово, если бы было сгенерировано «общедоступное перечисление STECountryBasic», необязательно с комментарием «относится к STECountry». А можно без смены xsd? Может с конфигом в jaxb-привязках?
Вам понадобится STE_Country для создания интерфейса, а не класса, который STE_Country затем реализует, а не расширяет. Посмотрите этот вопрос stackoverflow.com/questions/1271980/…, который требовал того же, что и IIUC.
Хорошо спасибо я попробую
К сожалению, я не получил решения с работающим интерфейсом. Но я нашел способ преобразовать xsd через XSL, поэтому STE_CountryBasic выглядит как ST_Month в xsd. На втором этапе генерации создается еще один класс STE_ContryBasicValues в качестве перечисления. @daniu В любом случае спасибо за ваше предложение.




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