From f5ca6966ba759c445edfae736f9222af1341a51a Mon Sep 17 00:00:00 2001 From: Daniel Siviter Date: Mon, 17 Mar 2025 14:59:29 +0000 Subject: [PATCH] Addresses #665 --- .../internal/jsonstructure/JsonArrayIterator.java | 6 +++++- .../jsonstructure/JsonStructureToParserAdapter.java | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonArrayIterator.java b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonArrayIterator.java index 1b26ca8c2..e87340919 100644 --- a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonArrayIterator.java +++ b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonArrayIterator.java @@ -29,7 +29,7 @@ public class JsonArrayIterator extends JsonStructureIterator { private final Iterator valueIterator; - + private final JsonArray jsonArray; private JsonValue currentValue; /** @@ -38,6 +38,7 @@ public class JsonArrayIterator extends JsonStructureIterator { * @param jsonArray json array */ public JsonArrayIterator(JsonArray jsonArray) { + this.jsonArray = jsonArray; this.valueIterator = jsonArray.iterator(); } @@ -62,6 +63,9 @@ public JsonParser.Event next() { @Override JsonValue getValue() { + if (currentValue == null) { + return jsonArray; + } return currentValue; } diff --git a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java index dfa9d64f4..841dbc67a 100644 --- a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java +++ b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java @@ -109,12 +109,25 @@ public JsonObject getObject() { if (current instanceof JsonObjectIterator) { //Remove child iterator as getObject() method contract says iterators.pop(); + return current.getValue().asJsonObject(); } else { throw new JsonbException(Messages.getMessage(MessageKeys.INTERNAL_ERROR, "Outside of object context")); } } + @Override + public JsonArray getArray() { + JsonStructureIterator current = iterators.peek(); + if (current instanceof JsonArrayIterator) { + //Remove child iterator as getObject() method contract says + iterators.pop(); + return current.getValue().asJsonArray(); + } else { + throw new JsonbException(Messages.getMessage(MessageKeys.INTERNAL_ERROR, "Outside of object context")); + } + } + private JsonNumber getJsonNumberValue() { JsonStructureIterator iterator = iterators.peek(); JsonValue value = iterator.getValue();