From 5317c88387cddefefb26d2a7e972c4d9ef0cc50d Mon Sep 17 00:00:00 2001 From: Ondrej Hrstka Date: Wed, 20 Apr 2022 13:26:30 +0200 Subject: [PATCH] Fixed support for deserialization from Base64 into a byte array. --- .../core/tree/JsonNodeTraversingParser.java | 11 ++++++++ .../tree/JsonNodeTraversingParserTest.groovy | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 jackson-core/src/test/groovy/io/micronaut/jackson/core/tree/JsonNodeTraversingParserTest.groovy diff --git a/jackson-core/src/main/java/io/micronaut/jackson/core/tree/JsonNodeTraversingParser.java b/jackson-core/src/main/java/io/micronaut/jackson/core/tree/JsonNodeTraversingParser.java index 12172334cb1..5d71d9817fb 100644 --- a/jackson-core/src/main/java/io/micronaut/jackson/core/tree/JsonNodeTraversingParser.java +++ b/jackson-core/src/main/java/io/micronaut/jackson/core/tree/JsonNodeTraversingParser.java @@ -257,6 +257,17 @@ public int getTextOffset() throws IOException { @Override public byte[] getBinaryValue(Base64Variant b64variant) throws IOException { + JsonNode currentNode = currentNodeOrNull(); + + if (currentNode != null && currentNode.isNull()) { + return null; + } + + String text = getText(); + if (text != null) { + return b64variant.decode(text); + } + return null; } diff --git a/jackson-core/src/test/groovy/io/micronaut/jackson/core/tree/JsonNodeTraversingParserTest.groovy b/jackson-core/src/test/groovy/io/micronaut/jackson/core/tree/JsonNodeTraversingParserTest.groovy new file mode 100644 index 00000000000..3733da70b36 --- /dev/null +++ b/jackson-core/src/test/groovy/io/micronaut/jackson/core/tree/JsonNodeTraversingParserTest.groovy @@ -0,0 +1,27 @@ +package io.micronaut.jackson.core.tree + +import com.fasterxml.jackson.core.Base64Variant +import com.fasterxml.jackson.core.Base64Variants +import io.micronaut.json.tree.JsonNode +import spock.lang.Specification + +class JsonNodeTraversingParserTest extends Specification { + + def getBinaryValue() { + given: + def parser = new JsonNodeTraversingParser(jsonNode) + + parser.nextToken() + + def binaryValue = parser.getBinaryValue(Base64Variants.MIME) + + expect: + binaryValue == expected?.bytes + + where: + jsonNode || expected + JsonNode.createStringNode("YWJj") || "abc" + JsonNode.nullNode() || null + } + +}