3

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>

「transition」と「ResponseBlock」がこれらの各タイプの有効な「サブクラス」に置き換えられる、この「サブクラス」を持つことができるようにしたいと思います。つまり、私はすでに制限/拡張によってそれらを導出しており、それ自体が制限によって導出された応答にそれらを含めたいと考えています:

<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: 粒子間に完全な機能マッピングがありません。

これを達成する方法についてのアイデアはありますか?

4

2 に答える 2

0

IDResponse が Response を拡張している場合、"complexType" は "complexContent"、"restriction" は "extension" である必要があります。

于 2010-11-15T08:26:23.750 に答える