如何更正JAXB生成器的XSD?

时间:2015-11-24 14:47:16

标签: java xml xsd jaxb xjc

我准备了complexType,这是一个包含两个属性的枚举:

<xsd:complexType name="Action">
    <xsd:simpleContent>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="A"/>
            <xsd:enumeration value="B"/>
            <xsd:enumeration value="C"/>
        </xsd:restriction>
    </xsd:simpleContent>
    <xsd:attribute name="attrA" type="xsd:string" />
    <xsd:attribute name="attrB" type="xsd:string" />
</xsd:complexType>

问题是,JAXB阻止我为该代码创建Java类,我收到以下错误:

  

使用时,基类型必须是complexType   其内容       type很简单,或者,只有在指定了restriction的情况下,才会出现混合类型       内容和可填充粒子,或者,仅当指定了扩展名时,才是简单类型。       'string'不满足这些条件。

在线验证员向我展示了我的代码是正确的。如何更改此设置以使xjc转换我的架构定义?

1 个答案:

答案 0 :(得分:2)

您的xsd格式不正确。请尝试以下complexType

<xs:complexType name="Action">
    <xs:simpleContent>
        <xs:extension base="ActionValue">
            <xs:attribute name="attrA" type="xs:string" />
            <xs:attribute name="attrB" type="xs:string" />
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

<xs:simpleType name="ActionValue">
    <xs:restriction base="xs:string">
        <xs:enumeration value="A" />
        <xs:enumeration value="B" />
        <xs:enumeration value="C" />
    </xs:restriction>
</xs:simpleType>