From 283e331e444e967c2f493fb612357ed85ddce139 Mon Sep 17 00:00:00 2001 From: Satya Date: Mon, 4 Mar 2024 21:57:42 +0800 Subject: [PATCH] fix: #209 Removed NUL character (\u0000) which is not allowed in Postgres jsonb column --- .../yaci/store/common/util/JsonUtil.java | 4 ++++ .../impl/model/InvalidTransactionEntity.java | 24 +++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/components/common/src/main/java/com/bloxbean/cardano/yaci/store/common/util/JsonUtil.java b/components/common/src/main/java/com/bloxbean/cardano/yaci/store/common/util/JsonUtil.java index 690ec07e1..65dba9971 100644 --- a/components/common/src/main/java/com/bloxbean/cardano/yaci/store/common/util/JsonUtil.java +++ b/components/common/src/main/java/com/bloxbean/cardano/yaci/store/common/util/JsonUtil.java @@ -56,6 +56,10 @@ public static JsonNode parseJson(String jsonContent) throws JsonProcessingExcept return mapper.readTree(jsonContent); } + public static ObjectMapper getMapper() { + return mapper; + } + static { mapper = (new ObjectMapper()).enable(SerializationFeature.INDENT_OUTPUT); } diff --git a/stores/utxo/src/main/java/com/bloxbean/cardano/yaci/store/utxo/storage/impl/model/InvalidTransactionEntity.java b/stores/utxo/src/main/java/com/bloxbean/cardano/yaci/store/utxo/storage/impl/model/InvalidTransactionEntity.java index f2cb1b33a..ce4d4b6ef 100644 --- a/stores/utxo/src/main/java/com/bloxbean/cardano/yaci/store/utxo/storage/impl/model/InvalidTransactionEntity.java +++ b/stores/utxo/src/main/java/com/bloxbean/cardano/yaci/store/utxo/storage/impl/model/InvalidTransactionEntity.java @@ -2,11 +2,10 @@ import com.bloxbean.cardano.yaci.helper.model.Transaction; import com.bloxbean.cardano.yaci.store.common.model.BaseEntity; +import com.bloxbean.cardano.yaci.store.common.util.JsonUtil; +import com.fasterxml.jackson.core.JsonProcessingException; import io.hypersistence.utils.hibernate.type.json.JsonType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -33,4 +32,21 @@ public class InvalidTransactionEntity extends BaseEntity { @Type(JsonType.class) @Column(columnDefinition = "json") private Transaction transaction; + + @PrePersist + public void prePersist() { + if (transaction == null) return; + + var json = JsonUtil.getJson(transaction); + if (json.contains("\\u0000")) { + json = json.replace("\\u0000", ""); + + try { + var updatedTransaction = JsonUtil.getMapper().readValue(json, Transaction.class); + setTransaction(updatedTransaction); + } catch (JsonProcessingException e) { + throw new RuntimeException("Error deserializing transaction json", e); + } + } + } }