Verständnisfrage zum Mapping

PinkMuffin

Bekanntes Mitglied
Hallo, ich hätte mal eine Verständnisfrage zu Mapping.
Im Internet finde ich leider nur ziemlich abstrakte Erklärungen zu Mapping, aber wenn ich im Code so etwas finde:

Java:
    @XmlElement(name = "ERDZ", required = true)
    protected ERDZ erdz;

dann heißt das einfach nur, dass in einer XML-Datei ein Element namens "ERDZ" existiert und ich das mit meiner
Java:
 protected ERDZ erdz
abbilde?
Angenommen, ich hätte eine gleiche Klasse wie ERDZ, die aber auch ein eigenes xml-Element ist, die etwas anders heißt, wo auch in der XML die Elemente ein bisschen anders heißen, aber von den Werten her absolut das gleiche machen, wie würde ich dann beim Refactoring vorgehen?
Intuitiv hätte ich jetzt versucht, die xml-Elemente des einen zusätzlich im anderen zu deklarieren und mit gettern auszustatten, damit eben eine der Klassen überflüssig wird? Aber dann wüsste ich nicht, wie ich das machen soll, da ich die Unter-Elemente ja durch den Element-Namen bekomme (?), der ja bei beiden verschieden ist.
Sorry wenn die Frage zu ungenau ist, allerdings habe ich noch nahezu keine Ahnung vom Mapping 😅


EDIT: Ich habe einen nicht so abstrakten Ansatz gefunden: https://howtodoinjava.com/jaxb/jaxb-annotations/
Allerdings konnte ich mir damit meine Frage zum Refactoring nicht beantworten, dafür fehlt mir vermutlich das tiefere Verständnis.
 
Zuletzt bearbeitet:
Also:
Java:
@XmlElement(name = "ERDZ", required = true)
protected ERDZ erdz;
bedeutet, dass in dem XML-Element, welches `this` (also die Instanz der Klasse, die dieses Feld deklariert) repräsentiert, es ein XML-Element <ERDZ> gibt. Der Inhalt (also die direkten Children) von diesem <ERDZ> Element sind dann die gemappten Felder deiner ERDZ Klasse.
Wenn deine ERDZ-Klasse also so aussieht:
Java:
public class ERDZ {
  @XmlElement(name = "A")
  String a;
  @XmlElement(name = "B")
  String b;
}
dann sieht das XML, welches auf die Instanz der Klasse mapped, die das ERDZ Feld deklariert, so aus:
XML:
<ERDZ>
  <A>...</A>
  <B>...</B>
</ERDZ>
Dass das XML-Element hier "ERDZ" heisst, hat nichts damit zu tun, dass die Klasse ERDZ heisst oder dass der Name des Feldes erdz heisst, sondern, dass das Element in der Annotation mit @XmlElement(name = "ERDZ") als "ERDZ" bezeichnet wird.
 
Wenn deine ERDZ-Klasse also so aussieht:
Java:
public class ERDZ {
  @XmlElement(name = "A")
  String a;
  @XmlElement(name = "B")
  String b;
}
dann sieht das XML, welches auf die Instanz der Klasse mapped, die das ERDZ Feld deklariert, so aus:
XML:
<ERDZ>
  <A>...</A>
  <B>...</B>
</ERDZ>

Vielen Dank erstmal, allerdings tut sich mir da eine Folgefrage auf:
hier mappen ja A und B auf einen String (falls man das so sagt), also hätten die dann wiederum keine "Kinder" mehr und
String a und String b würden die Werte zwischen
Java:
<A>...</A>
<B>...</B>
also quasi "..." annehmen? Wenn es weitere Unterinstanzen hätte, wäre das dann wieder als eigenen Objekttyp
Java:
  @XmlElement(name = "A")
  A a;

  @XmlElement(name = "B")
  B b;
zu deklarieren?
 

Neue Themen


Zurück
Oben