gpt4 book ai didi

java - 为什么带有 jdk1.5 的 JAXB 2.0 无法识别以数字开头的字符串枚举?

转载 作者:行者123 更新时间:2023-12-04 07:08:56 26 4
gpt4 key购买 nike

以下是我用来尝试生成 JAXB 类的示例模式。我注意到的是,当我有一个带有枚举的字符串类型时,例如,在我的例子中是 stepType,其值以数字开头,JAXB 不会生成一个单独的枚举类,比如 StepType 类。当我只使用字母作为值时,它工作正常。有人可以告诉这是否是一个已知的错误吗?

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

<xsd:element name="WorkoutSchedule" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="WorkoutSchedule" minOccurs = "0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ScheduleItem" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Step" minOccurs="1" maxOccurs="1" type="stepType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:simpleType name="stepType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="1stStep"></xsd:enumeration>
<xsd:enumeration value="2ndStep"></xsd:enumeration>
<xsd:enumeration value="3rdStep"></xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>

</xsd:schema>

最佳答案

JAXB 必须创建有效的 Java 代码,因此它必须遵守 Java 特定的命名规则。

Java 的枚举必须具有特定于 Java 的命名,这对于类、方法、字段等都是相同的……名称不允许以数字开头。

您可以使用 JAXB 将现有 Java 枚举编码为具有自定义名称的 XML 模式,方法是使用覆盖它们

/* some JAXB annotations go here */
enum MyEnum{
@XmlEnumValue(name="1")
ONE,
@XmlEnumValue(name="2")
TWO
}

相反的过程是通过一些“解决方法”完成的:
<xsd:simpleType>
<xsd:annotation>
<xsd:appinfo>
<jxb:typesafeEnumClass name="MyEnum">
<jxb:typesafeEnumMember name="ONE" value="1"/>
<jxb:typesafeEnumMember name="TWO" value="2"/>
</jxb:typesafeEnumClass>
</xsd:appinfo>
</xsd:annotation>
<xsd:restriction base="xsd:int">
<xsd:enumeration value="1"/>
<xsd:enumeration value="2"/>
</xsd:restriction>
</xsd:simpleType>

关于java - 为什么带有 jdk1.5 的 JAXB 2.0 无法识别以数字开头的字符串枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com