我正在使用JAXB從XSD生成代碼。我有一個外部綁定文件,它定義了其中一種XSD類型的實現類型(使用class
標記/ implClass
屬性)。當我這樣做時,生成的ObjectFactory被修改爲返回指定實現類的實例。但是,生成的類仍然使用生成的基礎類型聲明成員。有沒有辦法使生成的XSD類型引用的所有用法代替我的實現類型?JAXB綁定全局替換類型與實現類
作爲一個例子,假設 「example.xsd」 如下:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Member" type="MemberType" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="MemberType" />
</xsd:schema>
然後,我有以下 「bindings.xjb」 文件:
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
schemaLocation="example.xsd" node="/xsd:schema" version="2.1">
<bindings node="./xsd:complexType[@name='MemberType']">
<class implClass="myNamespace.Member" />
</bindings>
</bindings>
運行xjc
後產生JAXB類在上面的場景中,我得到一個ObjectFactory
類,其中包括以下方法:
public MemberType createMemberType() {
return new Member();
}
因此,工廠正在爲MemberType
正確生成我的實施實例。但是,生成Root
類的實現包括:
protected List<MemberType> member;
public List<MemberType> getMember() {
if (member == null) {
member = new ArrayList<MemberType>();
}
return this.member;
}
我反而喜歡,實現的:
protected List<Member> member;
public List<Member> getMember() {
if (member == null) {
member = new ArrayList<Member>();
}
return this.member;
}
有沒有辦法來指定,我想內的myNamespace.Member
更換MemberType
「 bingings.xjb「?由於這種配置,我預計ObjectFactory.createMemberType
的結果也會改變。謝謝。