2

以下は、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>
4

1 に答える 1

3

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> 
于 2009-03-22T01:33:30.220 に答える