以下是我用来尝试生成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>
答案 0 :(得分:3)
JAXB必须创建有效的Java代码,因此它必须遵循特定于Java的命名规则。
Java的枚举需要具有特定于Java的命名,这对于类,方法,字段等是相同的......不允许任何名称以数字开头。
您可以使用带有自定义名称的JAXB到XML模式封送现有Java枚举,方法是使用
覆盖它们/* 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>