Ich erzeuge Code von einem XSD mit JAXB. Ich habe eine externe Bindungsdatei, die den Implementierungstyp für einen der XSD-Typen definiert (mit dem Attribut class
/implClass
). Wenn ich das tue, wird die generierte ObjectFactory geändert, um eine Instanz der angegebenen implementierenden Klasse zurückzugeben. Die generierten Klassen deklarieren jedoch weiterhin Member mit dem generierten zugrunde liegenden Typ. Gibt es eine Möglichkeit, alle Verwendungen des generierten XSD-Typs stattdessen auf meinen Implementierungstyp zu verweisen?JAXB-Bindungen ersetzen den globalen Typ mit der implementierenden Klasse
Als Beispiel sei angenommen, "example.xsd" ist wie folgt:
<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>
Dann habe ich die folgenden "bindings.xjb" file:
<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>
Nach xjc
Laufen zu erzeugen JAXB-Klassen in dem obigen Szenario, bekomme ich eine ObjectFactory
Klasse, die die folgende Methode enthält:
Die Factory generiert also korrekt eine Instanz meiner Implementierung für MemberType
. Jedoch enthält die Implementierung der erzeugten Root
Klasse:
protected List<MemberType> member;
public List<MemberType> getMember() {
if (member == null) {
member = new ArrayList<MemberType>();
}
return this.member;
}
Ich würde stattdessen wie die Umsetzung zu sein:
protected List<Member> member;
public List<Member> getMember() {
if (member == null) {
member = new ArrayList<Member>();
}
return this.member;
}
Gibt es eine Möglichkeit zu geben, dass ich MemberType
mit myNamespace.Member
innerhalb "ersetzen möchten bingings.xjb "? Ich würde erwarten, dass sich das Ergebnis von ObjectFactory.createMemberType
aufgrund dieser Konfiguration ebenfalls ändert. Vielen Dank.