/ / Json Jackson Codierung - StackOverflowError - Java, Json, Jackson, HL7-fhir

Json-Jackson-Kodierung - StackOverflowError - Java, Json, Jackson, HL7-fhir

Ich versuche, ein Java-Objekt in einen Json-String zu konvertieren, und es schlägt mit einem StackoverflowError fehl, wahrscheinlich aufgrund einer inifiniten Schleife / eines unifiniten Zyklus in den Unterobjekten des Objekts.

    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:505)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639)
Caused by: java.lang.StackOverflowError
at java.lang.ClassLoader.defineClass1(Native Method)
...
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:655)

Das Objekt, das ich zu codieren versuche, ist eine Instanz einer Klasse, auf die ich keinen Einfluss habe. Ich kann sie nur subclassieren @JsonIgnore auf dem schuldigen Feld (ich meine auf die entsprechende überschriebene Getter-Methode), aber ich weiß nicht, um welche es sich handelt. Das sind riesige Klassen mit hunderten Feldern und Unterobjekten.

Gibt es eine einfache Möglichkeit zu wissen, welches Feld die Endlosschleife in der Json-Codierung verursacht?

PS: Für diejenigen, die sich damit auskennen, ist es das Patient Klasse des HL7-HAPI-FHIR-Frameworks. Ich bin mir bewusst, dass es einen benutzerdefinierten Json-Serializer mit diesem Framework gibt, aber ich muss den generischeren Jackson verwenden, um einige seiner Funktionen zu nutzen.

Danke vielmals

Antworten:

0 für die Antwort № 1

Dies geschieht, wenn Ihr Objektdiagramm einezirkuläre Abhängigkeit. Es gibt keinen wirklich einfachen Weg, den Zyklus zu finden. Ich kann alles in Ordnung bringen, Felder in Batches wieder einführen und sehen, wo er kaputt geht.

Wenn Sie eine Unterklasse erstellen, um einfach mit @Ignore zu kommentieren, sollten Sie sich das ansehen Jackson Mixins


0 für die Antwort № 2

Normalerweise sollte die Ausnahme immer noch ein Einschlussdiagramm enthalten (Namen der Eigenschaften, durch die der Zyklus gebildet wurde). Ist das hier nicht der Fall?