From 47efc1fbd2d2aa4492b97dc300cab11da59a2e72 Mon Sep 17 00:00:00 2001 From: Walid Lezzar Date: Thu, 10 Apr 2025 13:35:18 -0400 Subject: [PATCH] Support reading raw non json strings Fixes: https://github.com/adevinta/zoe/issues/61 --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/wlezzar/zoe?shareId=XXXX-XXXX-XXXX-XXXX). --- zoe-core/src/functions/poll.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/zoe-core/src/functions/poll.kt b/zoe-core/src/functions/poll.kt index 0ec33d2..d5e9370 100644 --- a/zoe-core/src/functions/poll.kt +++ b/zoe-core/src/functions/poll.kt @@ -15,6 +15,7 @@ import com.fasterxml.jackson.annotation.JsonValue import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.node.NullNode import com.fasterxml.jackson.databind.node.ObjectNode +import com.fasterxml.jackson.databind.node.TextNode import org.apache.avro.generic.GenericDatumWriter import org.apache.avro.generic.GenericRecord import org.apache.avro.io.EncoderFactory @@ -213,7 +214,7 @@ private class ProgressListener(val consumer: Consumer<*, *>) { object Jsonifiers { // TODO : enable injection of custom jsonifiers - private val jsonifiers = sequenceOf(GenericRecordToAvroJson(), RawToJson()).map { it.name() to it }.toMap() + private val jsonifiers = sequenceOf(GenericRecordToAvroJson(), RawToJson(), RawToTextNode()).map { it.name() to it }.toMap() fun get(name: String): Jsonifier = jsonifiers[name] ?: throw IllegalArgumentException("jsonifier not found : $name") @@ -245,10 +246,15 @@ class GenericRecordToAvroJson : Jsonifier { } class RawToJson : Jsonifier { - override fun name(): String = "raw" + override fun name(): String = "json" override fun format(input: Any): JsonNode = json.readTree(input.toString()) } +class RawToTextNode : Jsonifier { + override fun name(): String = "raw" + override fun format(input: Any): JsonNode = TextNode(input.toString()) +} + data class PartitionProgress( val topic: String, val partition: Int, @@ -293,4 +299,4 @@ enum class JsonQueryDialect(@JsonValue val code: String) { Jmespath("jmespath"), fun JsonQueryDialect.createInstance(): JsonSearch = when (this) { JsonQueryDialect.Jmespath -> JmespathImpl() JsonQueryDialect.Jq -> JqImpl() -} \ No newline at end of file +}