Wir haben eine Klasse mit einer JAXB Annotation auf einer Eigenschaft. Wir haben dann mehrere Unterklassen, die den Rest der wichtigen Daten annotieren. Wir haben jedoch eine Unterklasse, in der die Annotation der übergeordneten Klasse ignoriert werden soll, damit sie nicht gemarshallt wird. Hier ist ein Beispielcode.Wie JAXB annotierte Eigenschaften in einer übergeordneten Klasse ignorieren?
Übergeordnete Klasse:
@XmlType(name="Request")
@XmlAccessorType(XmlAccessorType.NONE)
public abstract class Request {
@XmlElement(required=true)
private UUID uuid;
... setter/getter
}
Jetzt für die Unterklasse:
@Xsd(name="concreteRequest")
@XmlRootElement("ConcreteRequest")
@XmlType(name="ConcreteRequest")
@XmlAccessorType(XmlAccessorType.FIELD)
public class ConcreteClass {
@XmlElement(required=true)
private String data1;
@XmlElement(required=true)
private String data1;
... setters/getters ...
}
Wenn ich eine Instanz von ConcreteClass masrhall ich folgende XML erhalten:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<uuid>uuid</uuid>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
Wo ich XML wollen so:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
Wir haben andere Implementierungen von Request, jedoch benötigen die UUID, dies ist nur ein Sonderfall. Gibt es eine Möglichkeit, das UUID-Feld in meinem ConcreteRequest zu ignorieren?
Leider glaube ich nicht, dass das in meiner Situation möglich ist. Das UUID-Feld wird in unserer Datenbank beibehalten, sodass es gefährlich wäre, es zu überschreiben. Grundsätzlich ist meine Klasse eine spezielle Unterklasse, wo es eine UUID hat, aber es gehört nicht zum XML-Schema. – prozaak
Aus meiner Analyse bietet JAXB keine geeignete Option für Ihre Anforderung. Was ich vorschlagen würde, ist die Verwendung des JAXB-Verhaltens - "Null Werte Element wird ignoriert, wenn @XmlElement (nillable = false)". Damit zum Zeitpunkt der Marshalling-Operation der Wert "uuid" explizit als null definiert wird, wird die Eigenschaft beim Marshalling nicht aufgebaut. Ich habe ein Beispiel Stück Code, konnte aber hier nicht teilen. – omega
Das funktioniert einfach nicht. – GoalBased