我有一個模式,即a schema for metalink file。爲此我想使用Maven Maven-jaxb2-plugin生成類。JAXB,如何爲具有元素重複屬性的模式生成類
該模式允許以屬性或元素的形式輸入版本,因此它具有重複的屬性。我如何使用Jaxb爲這樣的模式生成一個Java類(甚至是可能的),而不需要重命名屬性或元素。所以基本上我想這個重複的屬性映射到某種複雜類型與內部指示是否屬性或元素。至少這樣的解決方案會把我看作XML的最接近的表示。
可以這樣做嗎?如果是,那麼如何?
下面,說有問題的xsd片段。
<xs:complexType name="metalinkType">
<xs:all>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="identity" type="xs:string"/>
<xs:element minOccurs="0" name="license" type="licenseType"/>
<xs:element minOccurs="0" name="publisher" type="publisherType"/>
<xs:element minOccurs="0" name="releasedate" type="RFC822DateTime"/>
<xs:element minOccurs="0" name="tags" type="xs:string"/>
<xs:element minOccurs="0" name="version" type="xs:string"/>
<xs:element name="files" type="filesType"/>
</xs:all>
<xs:attribute name="version" type="xs:string" default="3.0"/>
<xs:attribute name="origin" type="xs:anyURI"/>
<xs:attribute name="type" default="static">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="dynamic"/>
<xs:enumeration value="static"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="pubdate" type="RFC822DateTime"/>
<xs:attribute name="refreshdate" type="RFC822DateTime"/>
<xs:attribute name="generator" type="xs:string"/>
</xs:complexType>
編輯:
而對於這樣的模式,我想已經由JAXB生成的Java模型,如:
public class Metalink {
private PropertyType<String> version;
...
}
public class PropertyType<T> {
private T val;
private boolean isAttribute;
...
}
是否有可能實現這樣的事情或者是在Java模型中有兩個不同屬性的唯一解決方案?
你可以使用'@ XmlJavaTypeAdapter'來創建一個你想要的結構,但你總是會以一個基於兩個屬性的Jaxb Java模型結束....我建議採取我的方法。 –