JAXB ist nicht die definierten Bindung in übergeordneten Elementen in der Kinder-Klasse außer Kraft zu setzen.
Um das zu erreichen, kann ich vorschlagen, eine Zwischenklasse zu verwenden, die alle enthalten sollte, die tatsächlich in Ihrer A-Klasse enthalten sind, aber Sie sollten es mit XmlTransient
annotieren und keine Zuordnung darin angeben.
Beide Klassen A
und B
sollten diese Basisklasse erweitern, aber jeder kann nun definieren, wie seine JAXB-Bindung definiert wird.
Hier ist ein Beispiel, beginnend mit Ihrem Code.
Basisklasse
@XmlTransient
public class Base {
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Die A
Klasse die Standard jaxb Verhalten verwenden können, wenn es geeignet ist. Es wird ein Mapping mit öffentlichen Feldern und öffentlichen Getter/Setter erstellt (daher vererbbar von der Elternklasse).
standardmäßig wenn @XmlAccessorType auf ein Paket nicht vorhanden ist, dann ist die folgende Paketebene Anmerkung wird angenommen.
@XmlAccessorType (XmlAccessType.PUBLIC_MEMBER)
A-Klasse
@XmlRootElement
public class A extends Base {
}
Wenn Sie Attribut als required
oder irgendwelche Besonderheiten angeben möchten Verwendung in den Elementen Mapping, sollten Sie Bindung explizit verwenden in der A-Klasse.
Aber die B
Klasse sollte @XmlAccessorType(XmlAccessType.NONE)
angeben, um eine vollständige Kontrolle über Felder zu serialisieren/deserialize aus der Base
Klasse zu haben.
B-Klasse
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class B extends Base {
@XmlElement
private String boundedStringSpecificToB;
}
Wie kann der Name für die Klasse _Required_ werden 'A' aber nicht für die Klasse 'B', wenn 'B' ist eine Unterklasse von' A'? – RudolphEst