Issue 342: Custom De-Serialization Bug (#482)

Signed-off-by: rmartinc <rmartinc@redhat.com>
diff --git a/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java b/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java
index c2a34b1..27fffb4 100644
--- a/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java
+++ b/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -271,7 +271,17 @@
 
     @Override
     public JsonValue getValue() {
-        return jsonParser.getValue();
+        if (level.isEmpty() || getLastEvent() == null) {
+            return jsonParser.getValue();
+        }
+        switch (getLastEvent()) {
+            case START_ARRAY:
+                return getArray();
+            case START_OBJECT:
+                return getObject();
+            default:
+                return jsonParser.getValue();
+        }
     }
 
     @Override
diff --git a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
index 2093e87..9eeb938 100644
--- a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
+++ b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
@@ -485,6 +485,25 @@
         }
     }
 
+    @Test
+    public void testDeserializeArrayWithAdvancingParserAfterObjectEndUsingValue() {
+        String json = "[{\"stringProperty\":\"Property 1 value\"},{\"stringProperty\":\"Property 2 value\"}]";
+        Jsonb jsonb = JsonbBuilder.create(new JsonbConfig().withDeserializers(new SimplePojoValueDeserializer()));
+        SimplePojo[] result = jsonb.fromJson(json, SimplePojo[].class);
+        assertEquals(2, result.length);
+    }
+
+    public class SimplePojoValueDeserializer implements JsonbDeserializer<SimplePojo> {
+        @Override
+        public SimplePojo deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
+            //parser.getValue advances the parser to END_OBJECT in case of object.
+            JsonObject json = parser.getValue().asJsonObject();
+            SimplePojo simplePojo = new SimplePojo();
+            simplePojo.setStringProperty(json.getString("stringProperty"));
+            return simplePojo;
+        }
+    }
+
     public class SimplePojo {
         private String stringProperty;