2016-12-10 3 views
1

Ich habe ein Problem beim Deserialisieren von javax.json.JsonObject, das vom Rest-Endpunkt abgerufen wird, der javax.json.JsonObject zurückgibt.
Ich verwende TomEE 7.0.2 Webprofil.Deserialisieren von JsonObject in REST-Client

Nach wenig Debugging, fand ich diese Ausnahme von Johnzone JsonObject implementation, und es ist NullPointerException bei der Verwendung der Methode JsonObject.getJsonObject(name).

Von javadoc für JsonObject sagt es, dass Methode keine Ausnahme auslösen sollte, wenn keine Zuordnung für name gefunden wird. Es sollte null zurückgegeben werden.

Diese JS-Deserialisierung soll wenig generisch sein, und manchmal sind nicht alle Abbildungen vorhanden. Und das ist ein Problem für mich, weil JsonObject.getJsonObject(name) in Third-Party-Bibliothek aufgerufen wird.

Habe ich etwas falsch verstanden, warum dieses NullPointerException geworfen wird? Ist es möglich, eine andere javax.json.JsonObject Implementierung zu verwenden, wenn Application War im TomEE Server ausgeführt wird?

Antwort

0

Sie können die Existenz mit containsKey testen, bevor Sie den tatsächlichen Wert lesen.

+0

Problem ist, dass der Aufruf von getJsonObject in Third-Party-Bibliothek verschachtelt ist, daher kann ich vor getJsonObject nicht den containsKey aufrufen, um die NullPointerException zu vermeiden. Wahrscheinlich bist du eine Person, die Fragen vom ersten Post an beantworten kann. Herzlichen Glückwunsch zu Ihrer Arbeit bei tomee server und jsonb specification. –

+0

Dies war ein Bug in JohnZon (wird in den nächsten Tagen mit der Korrektur wieder veröffentlicht werden) Ursache spec (JSONP) erfordert diese NPE, wenn Sie den direkten Wert (getString() für Beispiel) erhalten, aber nicht, wenn Sie eine JsonStructure bekommen (getJsonObject () oder getJsonString() zum Beispiel). In Johnzon haben wir immer eine NPE geworfen. Wenn Sie diesen Code nicht ändern können, besteht die Problemumgehung wahrscheinlich darin, das Json-Objekt neu zu erstellen, wenn es die Daten verpasste, bevor es an den Drittanbieter weitergegeben wurde. Nicht elegant, aber entsperren Sie. –

+0

Ich habe im Quellcode in Johnzon gesucht und gesehen, woher diese Ausnahme kommt. Das Problem, das wir haben, besteht darin, dass in dieser Bibliothek eine Menge Code zum Kennenlernen vorhanden ist, der sich mit Rest-Endpunkten verbindet, nach dem Aufruf von Hassoas-Links, Aufruf der Methode, Serialisierung und Deserialisierung. Und es funktionierte, bis wir es auf den Tomee setzten. Nur noch eine Frage, ist Fix für Johnzon wird bei nächsten tomee Release veröffentlicht werden? –

0

Es ist, weil Sie die Variable in einem falschen Typ abfangen. Versuchen Sie stattdessen var.

+0

Können Sie Ihrer Antwort weitere Informationen hinzufügen? Was meinst du mit falschem Typ? –