我有一个带有一些枚举值的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")
}
答案 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语法冲突。