JAXB: A cycle is detected in the object graph. This will cause infinitely deep XML

RungetSvohu

Bekanntes Mitglied
Hallo Leute,

kann mir einer erklären, wieso es hier zu einer javax.xml.bind.MarshalException kommt, die meint einen cycle entdeckt zu haben?

TimeOfDay-Class:
Java:
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class TimeOfDay extends GregorianCalendar {

	private static final long serialVersionUID = 1L;
	private final GregorianCalendar timestamp;

	public TimeOfDay() {
		super();
		timestamp = this;
		set(YEAR, 2012);
		set(MONTH, 0);
		set(DAY_OF_MONTH, 1);
		set(SECOND, 0);
		set(MILLISECOND, 0);
	}

	public TimeOfDay(int hour, int minute) {
		this();
		setTime(hour, minute);
	}

	public GregorianCalendar getTimestamp() {
		return timestamp;
	}

	public void setTimestamp(GregorianCalendar timestamp) {
		setTime(timestamp.get(HOUR_OF_DAY), timestamp.get(MINUTE));
	}

	@Override
	public TimeOfDay clone() {
		return new TimeOfDay(getHour(), getMinute());
	}

	public void setTime(int hour, int minute) {
		set(HOUR_OF_DAY, hour);
		set(MINUTE, minute);
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		SimpleDateFormat format = new SimpleDateFormat("kk:mm");
		sb.append(format.format(getTime()));
		sb.append(" Uhr");
		return sb.toString();
	}

	public int getHour() {
		return get(HOUR_OF_DAY);
	}

	public int getMinute() {
		return get(MINUTE);
	}

}

Ausgeführt wird:

Java:
	public static void main(String[] args) {
		TimeOfDay test = new TimeOfDay();

		File testFile = new File("test.xml");
		JAXBContext context;
		try {
			context = JAXBContext.newInstance(TimeOfDay.class);
			Marshaller m = context.createMarshaller();
			m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
			FileWriter writer = new FileWriter(testFile);
			m.marshal(test, writer);
			writer.close();
		} catch (final JAXBException e) {
			e.printStackTrace();
		} catch (final IOException e) {
			e.printStackTrace();
		}

	}

Vielen Dank!
 
S

SlaterB

Gast
ein TimeOfDay enthält ein Attribut timestamp, darin ist wieder dasselbe TimeOfDay, also wieder ein Attribut timestamp usw.,
das ist doch naheliegend,

wozu brauchst du das Attribut? in der getTimestamp()-Methode kannst du doch direkt this zurückgeben


edit:
@XmlTransient
könnte evtl. helfen
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
Wahrscheinlich wegen dem hier:
Java:
    private final GregorianCalendar timestamp;
Die Variable ist unnötig, weil Deine Klasse von GregorianCalendar ableitet. Und weiter unten setzt Du sie auf
Code:
this
. Das könnte dazu führen, dass im XML das Element sich selbst als Kind hat.
 

RungetSvohu

Bekanntes Mitglied
Wahrscheinlich wegen dem hier:
Java:
    private final GregorianCalendar timestamp;
Die Variable ist unnötig, weil Deine Klasse von GregorianCalendar ableitet. Und weiter unten setzt Du sie auf
Code:
this
. Das könnte dazu führen, dass im XML das Element sich selbst als Kind hat.

Ah, danke. Nun kommt kein Fehler mehr, dafür sieht die XML-Datei so aus:

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<timeOfDay/>

Also die Zeit selbst geht verloren. Woran liegt das?

PS: Die Klasse habe ich vor zwei Jahren geschrieben, damals lief es noch, aber heute bekommt er Probleme. Die scheinen da bei JAXB irgendetwas geändert zu haben.

Danke für die Hilfe!
 
N

nillehammer

Gast
Also die Zeit selbst geht verloren. Woran liegt das?
Da hört es mit meinen JAXB-Kenntnissen leider auf. Ich weiß nicht, inwieweit JAXB implizit getter mappt. Falls garnicht, müsstest Du die getter evtl. überschreiben, um über diesen die enstpr. JAXB-Annotationen setzen zu können.
 
S

SlaterB

Gast
> Also die Zeit selbst geht verloren. Woran liegt das?

was läßt dich glauben, dass es gehen können?
wieso sollte die API überhaupt irgendwas tun? da muss es doch eine grundsätzliche Annahme geben,
hast du das je erfolgreich gesehen, z.B. Beispiele in Tutorials?

im Zweifel auch immer genau an diese halten, ich habe jetzt die dumpfe Vermutung/ Erinnerung dass es mit dem Beans-Standard zu tun haben könnte:
nur Attribute x, zu denen es setX()-, getX()-Methoden gibt, werden ausgelesen,
das Interne GregorianCalendar fällt nicht darunter,

evtl. ist Vererbung generell übel dran, also Oberklassen ignoriert

vielleicht sind irgendwo exakte Spezifikationen nachzulesen
 

RungetSvohu

Bekanntes Mitglied
Habe das Problem gelöst, so klappt es nun:

Java:
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class TimeOfDay extends GregorianCalendar {

	private static final long serialVersionUID = 1L;

	private final GregorianCalendar timestamp;

	public TimeOfDay() {
		super();
		set(YEAR, 2012);
		set(MONTH, 0);
		set(DAY_OF_MONTH, 1);
		set(SECOND, 0);
		set(MILLISECOND, 0);
		timestamp = new GregorianCalendar();
		timestamp.setTime(getTime());
	}

	public TimeOfDay(int hour, int minute) {
		this();
		setTime(hour, minute);
	}

	public GregorianCalendar getTimestamp() {
		return timestamp;
	}

	public void setTimestamp(GregorianCalendar timestamp) {
		setTime(timestamp.get(HOUR_OF_DAY), timestamp.get(MINUTE));
	}

	@Override
	public TimeOfDay clone() {
		return new TimeOfDay(getHour(), getMinute());
	}

	public void setTime(int hour, int minute) {
		set(HOUR_OF_DAY, hour);
		set(MINUTE, minute);
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		SimpleDateFormat format = new SimpleDateFormat("kk:mm");
		sb.append(format.format(getTime()));
		sb.append(" Uhr");
		return sb.toString();
	}

	public int getHour() {
		return get(HOUR_OF_DAY);
	}

	public int getMinute() {
		return get(MINUTE);
	}

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 jaxb XML Mapper - Root Element mit Attribut XML & JSON 20
W jaxws jaxb wsdl Java-Klassen generieren und binding.xml verwenden XML & JSON 1
Rakshan Unmarshalling multiple namespaces with jaxb XML & JSON 0
B JAXB und HTML XML & JSON 1
E JAXB und java.nio.file.Path XML & JSON 4
W jaxb-api XML Feld nicht gesendet setzt das Defaultvalue nicht XML & JSON 3
S Muss ich bei JAXB immer noch eine zusaetzliche List-Wrapper Klasse erstellen wenn ich mehrere Objekte serialisieren will..? XML & JSON 1
S JAXB mit mehreren zusammenhängenden .xsd-Files XML & JSON 0
N JAXB: Überflüssiges Wrapper-Tag für Map-Einträge XML & JSON 0
D JAXB mit Map und Color XML & JSON 2
K JAXB-XML unvollständig XML & JSON 1
K JAXB Unmarshelling XML & JSON 1
E JAXB und abstrakte Klasse(n) XML & JSON 0
B JAXB - Unmarshal -> Kinder bekommen und die Kinder von den Kinder XML & JSON 7
B JAXB - Marshal ArrayList XML & JSON 2
B JAXB - java.util.Locale does not have a no-arg default constructor XML & JSON 2
B JAXB-Fehler bei REST-Api XML & JSON 0
M JAXB HashMap Dynamisches Laden XML & JSON 0
M JAXB @XMLID und @XMLIDREF, wie Daten hinzufügen XML & JSON 2
P JAXB-Problem XML & JSON 1
A JAXB: XMLMixed generieren XML & JSON 0
R [JAXB] XmlRootElement und XmlType gemeinsam nutzen XML & JSON 0
I XML to Object - Mapping mit JAXB 1.0 XML & JSON 1
L JAXB - Generischen Wert mit Liste belegen XML & JSON 1
M XML-Datei mit JAXB und 2 Namespaces XML & JSON 0
K JAXB Annotation @XMLRootElement vererben XML & JSON 0
F JAXB Unmarshal - Kein "default Constructor" XML & JSON 2
F.S.WhiTeY JAXB: Schema nicht "erben" XML & JSON 2
B JAXB - manuell Klassen aus xsd XML & JSON 3
S Jaxb Unmarshalling Problem XML & JSON 4
S JAXB - Any Elementliste - wie Werte verändern? XML & JSON 4
M JAXB versucht abstrakte Klasse zu erzeugen XML & JSON 7
M JAXB: automatisches Groß schreiben Property XML & JSON 9
C Projekt - JAXB, EMF oder doch DOM? XML & JSON 4
C JAXB: XML-Elemente einlesen und als XML-Attribute ausgeben XML & JSON 7
R sax, stax, jdom, jaxb? List von Objekten speichern und laden XML & JSON 6
J JAXB: Mehrmals abspeichern XML & JSON 3
D XML Einlesen mit JaxB XML & JSON 4
W JAXB Binding customization XML & JSON 4
L JAXB und Interfaces XML & JSON 4
S Problem with JAXB unmarshalling classes that have the same name in @XmlRootElement XML & JSON 2
eykarhorn JAXB namespace attribut aus rootelement entfernen XML & JSON 2
nrg JAXB - nor any of its super class is known to this context XML & JSON 3
S aus XML mit JAXB zu Baumstruktur XML & JSON 3
nrg JAXB generell auf XMLs übertragbar XML & JSON 22
Landei JAXB: Wert von übergeordneten Element XML & JSON 4
B PropertyChangeListener generieren mit JAXB (xjc) XML & JSON 3
G JAXB und verschachtelte Elemente? XML & JSON 6
G JAXB XML-Attribute feststellen XML & JSON 4
S JAXB 2 und JSR 303 XML & JSON 11
M [JAXB] @XmlAnyElement namespace XML & JSON 4
R JAXB Unmarshal XML & JSON 2
J JAXB und ArrayList XML & JSON 4
Landei Jpa2 -> jaxb??? XML & JSON 9
M JAXB - HashMap XML & JSON 1
dzim JAXB-Unmarshalling ignoriert/löscht Einträge aus XML - oder lässt sie verschwinden XML & JSON 3
S JAXB 2 und Java Annotationen/Interfaces generieren XML & JSON 3
ruutaiokwu jaxb eclipse plugin... XML & JSON 3
K JAXB: Klassen mit Annotation Lesen/Schreiben XML XML & JSON 3
R JAXB ausgewählte Felder XML & JSON 10
TiME-SPLiNTER JAXB: com.sun.xml.bind.v2.ContextFactory XML & JSON 3
V JAXB und leere Listen XML & JSON 2
L compareto(), equals() in JAXB generierten Dateien XML & JSON 3
D jaxb validierung/verification vor marshalling XML & JSON 3
J JAXB mit GregorianCalendar XML & JSON 4
HombreDelMundo JAXB can't handle interfaces XML & JSON 4
N Individuelles Wrapper-Element um Collection mit JAXB XML & JSON 6
B JAXB Unmarshalling mehrerer Objekte XML & JSON 2
V JAXB schema 2 java XML & JSON 3
B JPA + JAXB Mapping Problem XML & JSON 2
S Navigieren in unbekannten JAXB-Objecten XML & JSON 2
J JAXB NullPointerException im ContextFinder XML & JSON 6
H JAXB und STAX XML & JSON 2
H JAXB Probleme beim Unmarshalling XML & JSON 3
C Serialisierung mit JAXB XML & JSON 6
K JAXB und Maps -> Marshalling-Problem XML & JSON 6
S JAXB und viele verschachtelte Attribute XML & JSON 1
J JAXB - Map XML & JSON 2
O JAXB generierte Klassen sollen Serializable implementieren XML & JSON 1
aze JaxB: Nullelemente in Array nicht anzeigen XML & JSON 3
turmaline JAXB can't handle interfaces XML & JSON 20
sambalmueslie JAXB - Unmarshall ein XML-Document das aus zwei XSD Definitionen besteht XML & JSON 8
S JAXB und abstrakte Klasse(n) XML & JSON 4
P JAXB: Marshalling XML & JSON 7
aze JaxB Elemente in LinkedHashSet werden nicht wiededergegeben XML & JSON 3
M JAXB: Wie folgendes Konstrukt abbilden? XML & JSON 20
A Jaxb und Interfaces XML & JSON 12
B JaxB und XSD :-) XML & JSON 8
G JAXB - Marshaller - kein Rückgabewert XML & JSON 2
N XML will nicht weder JAXB noch XStream XML & JSON 8
F Zugriff auf durch JAXB erzeugte Object-Struktur... XML & JSON 6
C Java-Imports bei Jaxb XML & JSON 8
F Marshaling eines JAXB Objektes worin ein anderes JAXB Objekt eingeschlossen ist XML & JSON 6
K JAXB, Vererbung und Codegeneration XML & JSON 2
M XmlRootElement und JAXB XML & JSON 4
R JAXB: Aus einem Vector oder List XML Datei erstellen XML & JSON 1
G jaxb Vector (oder ähnliches) von Elementen generieren XML & JSON 6
M Jaxb Annotationen, Wert als XML Element XML & JSON 2
J JCheckbox abfragen und serialisieren mit JAXB 2.0 XML & JSON 15
F JAXB erste schritte XML & JSON 6

Ähnliche Java Themen

Neue Themen


Oben