在我的代码中,我需要将枚举类型从基于我的架构的 XML 文件映射到代码另一部分中的枚举类型,反之亦然。
问题在于这样的构造:
<simpleType name="sensorKindType">
<restriction base="string">
<enumeration value="ATS_S2_VOLTAGE_1_2" />
<enumeration value="ATS_S2_VOLTAGE_2_3" />
</restriction>
</simpleType>
将导致生成以下内容。
@XmlEnumValue("ATS_S2_VOLTAGE_1_2")
ATS_S_2_VOLTAGE_1_2("ATS_S2_VOLTAGE_1_2"),
@XmlEnumValue("ATS_S2_VOLTAGE_2_3")
ATS_S_2_VOLTAGE_2_3("ATS_S2_VOLTAGE_2_3"),
但是,我更希望拥有以下内容:
@XmlEnumValue("ATS_S2_VOLTAGE_1_2")
ATS_S2_VOLTAGE_1_2("ATS_S2_VOLTAGE_1_2"),
@XmlEnumValue("ATS_S2_VOLTAGE_2_3")
ATS_S2_VOLTAGE_2_3("ATS_S2_VOLTAGE_2_3"),
换句话说,S 和 2 之间没有下划线。
最佳答案
您可以使用自定义 JAXB 绑定(bind)来控制生成的枚举的名称。如果您有权访问架构,则可以将这些绑定(bind)内联到架构中,如下所示。如果您无权访问架构,则可以在外部绑定(bind)文件中定义这些首选项。
<xs:schema elementFormDefault="qualified"
targetNamespace="stackoverflow"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd">
<xs:simpleType name="sensorKindType">
<xs:restriction base="xs:string">
<xs:enumeration value="ATS_S2_VOLTAGE_1_2">
<xs:annotation>
<xs:appinfo>
<jaxb:typesafeEnumMember name="ATS_S2_VOLTAGE_1_2"/>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="ATS_S2_VOLTAGE_2_3">
<xs:annotation>
<xs:appinfo>
<jaxb:typesafeEnumMember name="ATS_S2_VOLTAGE_2_3"/>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
这对我来说效果很好,使用 JAXB maven 插件的默认设置,并在 pom 文件中包含以下代码片段:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
</plugin>
生成以下类型:
@XmlType(name = "sensorKindType", namespace = "stackoverflow")
@XmlEnum
public enum SensorKindType {
ATS_S2_VOLTAGE_1_2,
ATS_S2_VOLTAGE_2_3;
public String value() {
return name();
}
public static SensorKindType fromValue(String v) {
return valueOf(v);
}
}
关于jaxb - 如何让 JAXB (xjc) 停止在字符和数字之间添加下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23004748/