我的 XML 模式文件中有一组复杂类型。基本上我有一堆“响应”对象。每个响应对象都遵循相同的通用格式,但采用更具体的方式。因此,例如:
<xsd:simpleType name="Transition">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:complexType name="ResponseBlock"/>
<xsd:complexType name="Response">
<xsd:complexContent>
<xsd:sequence>
<xsd:element name="transition" type="dto:Transition"/>
<xsd:element name="data" type="dto:ResponseBlock"/>
</xsd:sequence>
</xsd:complexContent>
</xsd:complexType>
我想让它的“子类”成为可能,其中“转换”和“响应块”被替换为每种类型的有效“子类”。即我已经通过限制/扩展派生了它们,并希望将它们包含在本身通过限制派生的响应中:
<xsd:simpleType name="IDTransition">
<xsd:restriction base="dto:Transition">
<xsd:enumeration value="NEXT_PAGE"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="IDResponseBlock">
<xsd:complexContent>
<xsd:extension base="dto:ResponseBlock">
<xsd:sequence>
<xsd:element type="xsd:int" name="userID"/>
<xsd:element type="xsd:string" name="userName"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="IDResponse">
<xsd:complexContent>
<xsd:restriction base="Response">
<xsd:sequence>
<xsd:element name="transition" type="dto:IDTransition"/>
<xsd:element name="data" type="dto:IDResponseBlock"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
这样,使用 JAXB,我可以生成一个完全面向对象的继承结构。但它似乎没有编译;Eclipse 显示错误:
derivation-ok-restriction.5.4.2:“IDResponse”类型错误。类型的粒子不是基粒子的有效限制。rcase-Recurse.2:粒子之间没有完整的函数映射。
关于我如何做到这一点的任何想法?