rai*_*198 2 inheritance xsd jaxb xjc
在昨天这个类似的问题之后,我有另一个关于XML模式和XJC绑定中的继承的问题.
给出以下选择元素,使Book和Journal具有共同的父类型(Publication).
<xsd:choice >
<xsd:element name="Book" type="Book" />
<xsd:element name="Journal" type="Journal" />
</xsd:choice>
Run Code Online (Sandbox Code Playgroud)
生成的Java类属性如下:
private Book book;
private Journal journal;
Run Code Online (Sandbox Code Playgroud)
因为<xsd:choice>意味着可能有一个Book或一个Journal我更喜欢
private Publication bookOrJournal;
Run Code Online (Sandbox Code Playgroud)
如果我通过maxOccurs="unbounded"在choice元素中设置了一个Publications列表,它会以这种方式工作,我会得到
private List<Publication> bookOrJournal;
Run Code Online (Sandbox Code Playgroud)
如何使用非集合属性实现此目的?
您可以使用以下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>
Run Code Online (Sandbox Code Playgroud)
执行后xjc <XSD File> -extension,这为我生成了以下Java类.
@XmlElements({
@XmlElement(name = "Book", type = Book.class),
@XmlElement(name = "Journal", type = Journal.class)
})
protected Publication bookOrJournal;
Run Code Online (Sandbox Code Playgroud)
为了使用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">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |