[JAXB] nutzt Standard Konstruktor nicht?
Verfasst: Sa Okt 24, 2015 11:16 pm
Ich habe aktuelle ein kleines Problem mit der JAXB API, da ich grade versuche, meine Daten in einer XML Datei zu speichern bzw. diese dort auszulesen und aktuell geht es primär um das einlesen. Meine XML Datei sieht so aus:
und so sieht der Raum aus:
Das Problem ist jetzt, das er irgendwie jeweils nur so viele Nachbarn in der Liste hat, wie ich in der XML Datei angebe aber da sollten doch laut dem Standardkonstruktor immer 4 Räume drin sein? Wieso ignoriert er dann einfach die Zeile, wo ich sage:
Das sollten denn dann nämlich derzeit die Größe 4 (3) im Array sein aber für Raum 1 habe ich bspw. jetzt nur zwei Nachbarn. So habe ich nämlich jetzt auch das Problem, das er für alle Richtungen, außer geradeaus den falschen Raum (ref) als Nachbar zurückgibt. Wie kann ich das Problem also lösen, ohne das ich jetzt immer 4 Räume in der Datei angeben, also für jede Richtung angeben muss?
Code: Alles auswählen
<?xml version="1.0"?>
<karte>
<raueme>
<raum id="1">
<beschreibung>Der erste Raum</beschreibung>
<nachbarn>
<nachbar>
<richtung>geradeaus</richtung>
<ref>2</ref>
</nachbar>
<nachbar>
<richtung>rechts</richtung>
<ref>3</ref>
</nachbar>
<nachbarn>
</raum>
<raum id="2">
<beschreibung>Raum 2</beschreibung>
<nachbarn>
<nachbar>
<richtung>zurück</richtung>
<ref>1</ref>
</nachbar>
<nachbarn>
</raum>
<raum id="3">
<beschreibung>Der dritte Raum</beschreibung>
<nachbarn>
<nachbar>
<richtung>links</richtung>
<ref>1</ref>
</nachbar>
<nachbarn>
</raum>
</raueme>
</karte>
Code: Alles auswählen
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlID;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "raum")@XmlAccessorType(XmlAccessType.NONE)
public class Raum
{
@XmlID
@XmlAttribute
private String id;
private String beschreibung;
@XmlElementWrapper(name = "nachbarn")@XmlElement(name = "nachbar")
private Nachbar[] nachbarn;
private static final int anzRichtungen = Richtung.values().length;
public Raum()
{
nachbarn = new Ausgang[anzahlRichtungen];
}
@XmlElement(name = "beschreibung")
public void setBeschreibung(String beschreibung)
{
this.beschreibung = beschreibung;
}
public void setNachbar(Richtung richtung, Raum nachbar)
{
nachbarn[richtung.ordinal()] = new Nachbar(richtung, nachbar);
}
public Nachbar getNachbar(Richtung richtung)
{
return nachbarn[richtung.ordinal()];
}
}
Code: Alles auswählen
nachbarn = new Ausgang[anzahlRichtungen];