XJC使用枚举类型生成带有Value_的枚举

时间:2018-03-15 02:17:24

标签: jaxb xjc

我有一个带有一些枚举值的XSD,如下所示。当XJC生成相应元素的枚举时,它会生成如下所示。你能不能让我自定义所需的枚举,以便它生成enum为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")
}

1 个答案:

答案 0 :(得分: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语法冲突。