2

3 つの注釈付きクラスがあります (コードを読みやすくするために、ゲッター、セッターなどを意図的に削除しました)。

結果.java

@XmlRootElement(name = "resultat")
@XmlType(propOrder = { "state", "content" })
public class Result {
    protected State state;
    protected Content content;
}

コンテンツ.java:

@XmlRootElement(name = "content")
@XmlSeeAlso({ Job.class })
public class Content {
}

コンテンツを拡張するJob.java:

@XmlType(name = "job", propOrder = { "status" })
@XmlRootElement(name = "job")
public class JobStatus extends Content {
    protected String status;
}

結果クラスの content メンバーの値として Job インスタンスを設定していますが、次のような xml ファイルが生成されます。

<result>
    <state>
        <tag>value</tag>
    </state>
    <content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="job">
        <status>ok</status>
    </content>
</result>

しかし、これは有効な xml ファイルではなく、"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="job" のため、次のスキーマに対して検証できません。 job はhttp://www.w3.org/2001/XMLSchema-instanceの型ではないため、" の部分。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="result">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="state">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="tag"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="content">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="status"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

この問題を回避するために JAXB 構成を変更するにはどうすればよいですか?

ありがとう !

4

2 に答える 2