Java 为什么带有jdk1.5的JAXB2.0无法识别以数字开头的字符串枚举?

Java 为什么带有jdk1.5的JAXB2.0无法识别以数字开头的字符串枚举?,java,jaxb,jdk1.5,Java,Jaxb,Jdk1.5,下面是我用来尝试生成JAXB类的示例模式。我注意到,当我有一个带有枚举的字符串类型时,例如,在我的例子中是stepType,其值以数字开头,JAXB不会生成单独的枚举类,比如stepType类。当我只使用字母作为值时,它工作得很好。有人能告诉我这是不是一个已知的错误吗 <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema"> <

下面是我用来尝试生成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到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> 

@Thiru:您应该看到一个编辑按钮,用于编辑要添加到此内容中的问题。你可能不会,但应该有一个以上这些评论。