From 5d80fb2e95b14f9af89acc298a42d0e4cae5a41a Mon Sep 17 00:00:00 2001 From: Trong Nguyen Date: Wed, 25 Jun 2025 11:07:57 +1000 Subject: [PATCH] updated to stricter json deserialization for TokenLinkDtoTokenMetadata --- .../sdk/model/TokenLinkDtoTokenMetadata.java | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/fireblocks/sdk/model/TokenLinkDtoTokenMetadata.java b/src/main/java/com/fireblocks/sdk/model/TokenLinkDtoTokenMetadata.java index 9a58a41e..9ff244b4 100644 --- a/src/main/java/com/fireblocks/sdk/model/TokenLinkDtoTokenMetadata.java +++ b/src/main/java/com/fireblocks/sdk/model/TokenLinkDtoTokenMetadata.java @@ -26,6 +26,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fireblocks.sdk.JSON; import java.io.IOException; import java.util.Collections; @@ -78,6 +79,8 @@ public TokenLinkDtoTokenMetadata deserialize(JsonParser jp, DeserializationConte boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); int match = 0; JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + ObjectMapper objectMapper = new ObjectMapper(); + // deserialize AssetMetadataDto try { boolean attemptParsing = true; @@ -108,10 +111,7 @@ public TokenLinkDtoTokenMetadata deserialize(JsonParser jp, DeserializationConte } } if (attemptParsing) { - deserialized = tree.traverse(jp.getCodec()).readValueAs(AssetMetadataDto.class); - // TODO: there is no validation against JSON schema constraints - // (min, max, enum, pattern...), this does not perform a strict JSON - // validation, which means the 'match' count may be higher than it should be. + deserialized = objectMapper.readValue(tree.traverse(jp.getCodec()), AssetMetadataDto.class); match++; log.log(Level.FINER, "Input data matches schema 'AssetMetadataDto'"); } @@ -150,11 +150,7 @@ public TokenLinkDtoTokenMetadata deserialize(JsonParser jp, DeserializationConte } } if (attemptParsing) { - deserialized = - tree.traverse(jp.getCodec()).readValueAs(CollectionMetadataDto.class); - // TODO: there is no validation against JSON schema constraints - // (min, max, enum, pattern...), this does not perform a strict JSON - // validation, which means the 'match' count may be higher than it should be. + deserialized = objectMapper.readValue(tree.traverse(jp.getCodec()), CollectionMetadataDto.class); match++; log.log(Level.FINER, "Input data matches schema 'CollectionMetadataDto'"); } @@ -193,11 +189,7 @@ public TokenLinkDtoTokenMetadata deserialize(JsonParser jp, DeserializationConte } } if (attemptParsing) { - deserialized = - tree.traverse(jp.getCodec()).readValueAs(ContractMetadataDto.class); - // TODO: there is no validation against JSON schema constraints - // (min, max, enum, pattern...), this does not perform a strict JSON - // validation, which means the 'match' count may be higher than it should be. + deserialized = objectMapper.readValue(tree.traverse(jp.getCodec()), ContractMetadataDto.class); match++; log.log(Level.FINER, "Input data matches schema 'ContractMetadataDto'"); }