JAXBを使用してXSDからコードを生成しています。 XSDタイプ(class
タグ/ implClass
属性を使用)のいずれかの実装タイプを定義する外部バインディングファイルがあります。これを行うと、生成されたObjectFactoryが、指定された実装クラスのインスタンスを返すように変更されます。ただし、生成されたクラスは生成された基底型のメンバを宣言します。代わりに、生成されたXSD型参照のすべての使用を実装タイプにするための方法がありますか?次のような例としてJAXBバインディングを実装クラスにグローバルに置き換える
、 "example.xsd" を前提としている:生成するxjc
を実行した後
<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>
:次に
<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" ファイルを持っています上記のシナリオでは、JAXBクラスの場合、次のメソッドを含むObjectFactory
クラスを取得します。
工場で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
の結果も同様に変化すると期待しています。ありがとう。