首页 > 解决方案 > Jaxb 将带有抽象超类的枚举解组到 Java - 未生成枚举值

问题描述

我有一个必须遵循的 web 服务标准,有一个 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
{
}

我还为“MyOwnCountry”添加了自己的 complexType,其中包含 STE_Country 中缺少但在我的应用程序中需要的国家/地区值。但生成的类与 STECountryBasic 是相同的空结果。

我该怎么做才能生成 STECountryBasic 中的枚举值?

此外,我正在使用 cxf-codegen-plugin 通过 maven 生成

标签: javaxmlxsdjaxb

解决方案


推荐阅读