XJC сгенерировал перечисление с Value_ с типом перечисления

У меня есть XSD с некоторыми перечисляемыми значениями, как показано ниже. Когда XJC генерирует перечисление соответствующего элемента, он генерирует, как показано ниже. Не могли бы вы дать мне необходимую настройку, чтобы он генерировал перечисление как 5 ("05").

<xsd:simpleType name="CountyCodeEnumType">
        <xsd:annotation>
            <xsd:documentation>FL_CNTY_CD</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="01">
                <xsd:annotation>
                    <xsd:documentation>Dade</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="02">
                <xsd:annotation>
                    <xsd:documentation>Duval</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="03">
                <xsd:annotation>
                    <xsd:documentation>Hillsborough</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="04">
                <xsd:annotation>
                    <xsd:documentation>Pinellas</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
        </xsd:restriction>
</xsd:simpleType>

Сгенерированный Java-код

@XmlType(name = "CountyCodeEnumType")
@XmlEnum
public enum CountyCodeEnumType {


    /**
     * Dade
     * 
     */
    @XmlEnumValue("01")
    VALUE_1("01"),

    /**
     * Duval
     * 
     */
    @XmlEnumValue("02")
    VALUE_2("02"),

    /**
     * Hillsborough
     * 
     */
    @XmlEnumValue("03")
    VALUE_3("03"),

    /**
     * Pinellas
     * 
     */
    @XmlEnumValue("04")
    VALUE_4("04")
}

person Debopam    schedule 15.03.2018    source источник


Ответы (1)


Вы не можете назвать значение перечисления числом. Так что 5("05") технически невозможно.

Однако вы можете настроить имена значений перечисления, используя привязку typesafeEnumMember. Вот пример:

<jaxb:bindings schemaLocation="ogc/gml/3.1.1/base/coverage.xsd" node="/xs:schema">
    <jaxb:bindings node="xs:simpleType[@name='IncrementOrder']">
        <jaxb:typesafeEnumClass>
            <jaxb:typesafeEnumMember name="PLUS_X_PLUS_Y" value="+x+y"/>
            <jaxb:typesafeEnumMember name="PLUS_X_MINUS_Y" value="+x-y"/>
            <jaxb:typesafeEnumMember name="MINUS_X_PLUS_Y" value="-x+y"/>
            <jaxb:typesafeEnumMember name="MINUS_X_MINUS_Y" value="-x-y"/>
        </jaxb:typesafeEnumClass>
    </jaxb:bindings>
</jaxb:bindings>

Таким образом, вы можете сделать что-то вроде:

<jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
    <jaxb:bindings node="xs:simpleType[@name='CountyCodeEnumType']">
        <jaxb:typesafeEnumClass>
            <jaxb:typesafeEnumMember name="_1" value="01"/>
            <jaxb:typesafeEnumMember name="_2" value="02"/>
            <jaxb:typesafeEnumMember name="_3" value="03"/>
            <jaxb:typesafeEnumMember name="_4" value="04"/>
        </jaxb:typesafeEnumClass>
    </jaxb:bindings>
</jaxb:bindings>

Это даст вам _4("04"), что довольно близко к тому, что вы изначально хотели, и не противоречит синтаксису Java.

person lexicore    schedule 15.03.2018
comment
Спасибо. Но есть ли какое-либо общее решение вместо упоминания всех значений по одному. У меня такая же проблема с другим перечислением, которое будет иметь 50 значений. - person Debopam; 15.03.2018
comment
@Debopam Вы можете написать для этого плагин XJC на основе шаблона, но, честно говоря, написание привязок для 50 элементов будет намного быстрее. - person lexicore; 15.03.2018