From 8b136d3fba2477f6a4b4d03ed6ab223f6856c0fa Mon Sep 17 00:00:00 2001 From: Oguzhan Unlu Date: Wed, 28 Oct 2020 16:40:28 +0300 Subject: [PATCH] Common: fix number deserialization in API Request Enrichment (close #383) --- .../enrichments/registry/apirequest/Output.scala | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/common/src/main/scala/com.snowplowanalytics.snowplow.enrich/common/enrichments/registry/apirequest/Output.scala b/modules/common/src/main/scala/com.snowplowanalytics.snowplow.enrich/common/enrichments/registry/apirequest/Output.scala index 253db43d4..3e06de15e 100644 --- a/modules/common/src/main/scala/com.snowplowanalytics.snowplow.enrich/common/enrichments/registry/apirequest/Output.scala +++ b/modules/common/src/main/scala/com.snowplowanalytics.snowplow.enrich/common/enrichments/registry/apirequest/Output.scala @@ -14,12 +14,12 @@ package com.snowplowanalytics.snowplow.enrich.common package enrichments.registry.apirequest import cats.syntax.either._ +import com.fasterxml.jackson.core.{JsonFactory, JsonParser} +import com.snowplowanalytics.snowplow.enrich.common.utils.CirceUtils +import com.snowplowanalytics.snowplow.enrich.common.utils.JsonPath.{query, wrapArray} import io.circe._ -import io.circe.parser._ import io.circe.syntax._ -import utils.JsonPath.{query, wrapArray} - /** * Base trait for API output format. Primary intention of these classes is to perform transformation * of API raw output to self-describing JSON instance @@ -117,6 +117,9 @@ final case class JsonOutput(jsonPath: String) extends ApiOutput[Json] { case other => other.leftMap(JsonPathException.apply) } + private[this] val jsonFactory: JsonFactory = new JsonFactory(CirceUtils.mapper) def parseResponse(response: String): Either[Throwable, Json] = - parse(response) + Either + .catchNonFatal[JsonParser](jsonFactory.createParser(response)) + .flatMap(parser => Either.catchNonFatal[Json](CirceUtils.mapper.readValue(parser, classOf[Json]))) }