001/*-
002 * #%L
003 * Smile CDR - CDR
004 * %%
005 * Copyright (C) 2016 - 2026 Smile CDR, Inc.
006 * %%
007 * All rights reserved.
008 * #L%
009 */
010package ca.cdr.api.model.json;
011
012import tools.jackson.core.JacksonException;
013import tools.jackson.core.JsonParser;
014import tools.jackson.databind.DeserializationContext;
015import tools.jackson.databind.JsonNode;
016import tools.jackson.databind.ObjectMapper;
017import tools.jackson.databind.ValueDeserializer;
018import tools.jackson.databind.json.JsonMapper;
019
020/**
021 * Sometimes, the JSON received in the additionalJson property of the TransactionLogEventJson may be nested. This Custom deserializer helps
022 * prevent the JSON parse error: "Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)" from occurring when
023 * additionalJson is being deserialized.
024 */
025public class RawJsonDeserializer extends ValueDeserializer<String> {
026        private static final ObjectMapper mapper =
027                        JsonMapper.builderWithJackson2Defaults().build();
028
029        @Override
030        public String deserialize(JsonParser theParser, DeserializationContext theDeserializationContext)
031                        throws JacksonException {
032                JsonNode node = mapper.readTree(theParser);
033                return mapper.writeValueAsString(node);
034        }
035}