[英]JAXB Enum Generating as VALUE_1 Instead of XSD String Names
我有一个 XSD 文件
<xsd:simpleType name="FieldName">
<xsd:restriction base="xsd:string">
<xsd:enumeration value=" " />
<xsd:enumeration value="COMMON_NAME" />
<xsd:enumeration value="IP_ADDRESS" />
<xsd:enumeration value="ORIGINAL_ID" />
<xsd:enumeration value="SITE_NAME" />
</xsd:restriction>
</xsd:simpleType>
生成的 JAXB class 有点奇怪,因为它生成的字段值为
@XmlEnumValue("COMMON_NAME")
VALUE_1("COMMON_NAME"),
@XmlEnumValue("IP_ADDRESS")
VALUE_2("IP_ADDRESS"),
.
.
and so on.
绑定 xjb 文件(某些属性或其他东西)中是否有一种方法可以使其使用字符串名称而不是通用的“VALUE_1”生成。 这是一个较小的示例,其中还有一个包含 300 多个值的枚举,这是一个外部 XSD(由我们组织中的其他团队拥有)。 所以我不能只输入 go 并修改 XSD。
任何指针将不胜感激。
最有可能的是,从其中一个值不能转换为 Java 枚举常量名称的那一刻起,JAXB 会生成后备名称,例如 VALUE_1、VALUE_2 等。
当值是数字时就是这种情况,例如“1.2”、1.3”等。
在您的示例中,枚举以值“”开头,与 Java 常量名称不匹配。
在这些情况下,您需要告诉 JAXB 您想要的 Java 枚举常量名称,对于特定 XSD 枚举限制中的每个枚举值。
就像我们对 MODS 3.6 xsd 所做的那样:
<xs:element name="mods" type="modsDefinition"/>
<!-- -->
<xs:complexType name="modsDefinition">
<xs:group ref="modsGroup" maxOccurs="unbounded"/>
<xs:attribute name="ID" type="xs:ID"/>
<xs:attribute name="version">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="3.6"/>
<xs:enumeration value="3.5"/>
<xs:enumeration value="3.4"/>
<xs:enumeration value="3.3"/>
<xs:enumeration value="3.2"/>
<xs:enumeration value="3.1"/>
<xs:enumeration value="3.0"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
我们像这样配置绑定:
<bindings
node="xs:complexType[@name='modsDefinition']/xs:attribute[@name='version']">
<property name="version" />
<bindings node="xs:simpleType">
<typesafeEnumClass name="EnumModsVersion">
<typesafeEnumMember name="V3_6" value="3.6"/>
<typesafeEnumMember name="V3_5" value="3.5"/>
<typesafeEnumMember name="V3_4" value="3.4"/>
<typesafeEnumMember name="V3_3" value="3.3"/>
<typesafeEnumMember name="V3_2" value="3.2"/>
<typesafeEnumMember name="V3_1" value="3.1"/>
<typesafeEnumMember name="V3_0" value="3.0"/>
</typesafeEnumClass>
</bindings>
</bindings>
获取此 Java 代码:
@XmlType(name = "")
@XmlEnum
public enum EnumModsVersion {
@XmlEnumValue("3.6")
V3_6("3.6"),
@XmlEnumValue("3.5")
V3_5("3.5"),
@XmlEnumValue("3.4")
V3_4("3.4"),
@XmlEnumValue("3.3")
V3_3("3.3"),
@XmlEnumValue("3.2")
V3_2("3.2"),
@XmlEnumValue("3.1")
V3_1("3.1"),
@XmlEnumValue("3.0")
V3_0("3.0");
private final String value;
EnumModsVersion(String v) {
value = v;
}
public String value() {
return value;
}
public static ModsDefinition.EnumModsVersion fromValue(String v) {
for (ModsDefinition.EnumModsVersion c: ModsDefinition.EnumModsVersion.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.