【问题标题】:XJC generated enum with Value_ with enum typeXJC 使用 Value_ 生成枚举,枚举类型
【发布时间】:2018-03-15 02:17:24
【问题描述】:

我有一个带有一些枚举值的 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")
}

【问题讨论】:

    标签: jaxb xjc


    【解决方案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 语法不冲突。

    【讨论】:

    • 谢谢。但是有没有通用的解决方案,而不是一一提到所有的值。我对另一个有 50 个值的枚举也有同样的问题
    • @Debopam 您可以基于模式为此编写一个 XJC 插件,但坦率地说,为 50 个项目编写绑定会更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多