2

昨日のこの同様の質問の後、XMLスキーマとXJCバインディングの継承に関する別の質問があります。

BookとJournalが共通の親タイプ()を持つように、次の選択要素が与えられますPublication

<xsd:choice >
    <xsd:element name="Book" type="Book" />
    <xsd:element name="Journal" type="Journal" />
</xsd:choice>

生成されるJavaクラスのプロパティは次のとおりです。

private Book book;
private Journal journal;

は、または私が好む<xsd:choice>かもしれないことを意味しますBookJournal

private Publication bookOrJournal;

maxOccurs="unbounded"選択要素を設定して出版物のリストを作成した場合、そのように機能し、次のようになります。

private List<Publication> bookOrJournal;

非コレクションプロパティでこれを実現するにはどうすればよいですか?

4

1 に答える 1

5

これを実現するには、次のXJC バインディングを使用できます。

<xs:complexType name="myClass">
  <xs:sequence>
    <xs:choice>
      <xs:annotation>
        <xs:appinfo>
          <jaxb:property name="bookOrJournal"/>
        </xs:appinfo>
      </xs:annotation>
      <xs:element name="Book" type="Book"/>
      <xs:element name="Journal" type="Journal"/>
    </xs:choice>
  </xs:sequence>
</xs:complexType>

を実行するxjc <XSD File> -extensionと、次の Java クラスが生成されました。

@XmlElements({
    @XmlElement(name = "Book", type = Book.class),
    @XmlElement(name = "Journal", type = Journal.class)
})
protected Publication bookOrJournal;

XJC バインディングを使用するために、XSD の先頭に以下を追加しました。

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  jaxb:version="1.0" jaxb:extensionBindingPrefixes="xjc">
于 2012-04-13T13:19:35.623 に答える