From 6dea603a5735f8c46aa17dd4db777527eeacb90f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hrstka?= Date: Wed, 20 Apr 2022 11:30:43 +0200 Subject: [PATCH] Fixed support for deserialization from Base64 into a byte array. --- .../core/tree/JsonNodeTraversingParser.java | 4 +++ .../tree/JsonNodeTraversingParserTest.groovy | 28 +++++++++++++++++++ 2 files changed, 32 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..069f87961e6 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,10 @@ public int getTextOffset() throws IOException { @Override public byte[] getBinaryValue(Base64Variant b64variant) throws IOException { + 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..dade1a1f80a --- /dev/null +++ b/jackson-core/src/test/groovy/io/micronaut/jackson/core/tree/JsonNodeTraversingParserTest.groovy @@ -0,0 +1,28 @@ +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 jsonNode = JsonNode.createArrayNode([JsonNode.createStringNode(content)]) + def parser = new JsonNodeTraversingParser(jsonNode) + + parser.nextToken() + parser.nextToken() + + def binaryValue = parser.getBinaryValue(Base64Variants.MIME) + + expect: + new String(binaryValue) == expected + + where: + content || expected + "YWJj" || "abc" + } + +}