Skip to content

Commit 7171a9d

Browse files
author
stevegutz
authored
Merge pull request #22 from HubSpot/reader-deserialization
Don't fail deserialization when the ObjectCodec is an ObjectReader
2 parents 3491a00 + c7b2454 commit 7171a9d

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

algebra-jackson/src/main/java/com/hubspot/algebra/ResultDeserializer.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77
import java.io.IOException;
88

99
import com.fasterxml.jackson.core.JsonParser;
10-
import com.fasterxml.jackson.core.JsonProcessingException;
10+
import com.fasterxml.jackson.core.ObjectCodec;
1111
import com.fasterxml.jackson.databind.DeserializationContext;
1212
import com.fasterxml.jackson.databind.JavaType;
1313
import com.fasterxml.jackson.databind.JsonMappingException;
1414
import com.fasterxml.jackson.databind.JsonNode;
15-
import com.fasterxml.jackson.databind.ObjectMapper;
1615
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
1716
import com.fasterxml.jackson.databind.node.ObjectNode;
1817
import com.hubspot.algebra.ResultModule.Case;
@@ -31,8 +30,8 @@ public ResultDeserializer(JavaType valueType) {
3130
@Override
3231
public Result<?, ?> deserialize(JsonParser p,
3332
DeserializationContext ctxt) throws IOException {
34-
ObjectMapper objectMapper = ((ObjectMapper) p.getCodec());
35-
ObjectNode node = objectMapper.readTree(p);
33+
ObjectCodec codec = p.getCodec();
34+
ObjectNode node = codec.readTree(p);
3635
JsonNode caseNode = node.findValue(CASE_FIELD_NAME);
3736

3837
if (caseNode == null) {
@@ -43,16 +42,16 @@ public ResultDeserializer(JavaType valueType) {
4342
node.remove(CASE_FIELD_NAME);
4443

4544
if (resultCase.equalsIgnoreCase(Case.ERR.toString())) {
46-
Object err = deserializeValue(objectMapper, node, ERROR_FIELD_NAME, errType);
45+
Object err = deserializeValue(codec, node, ERROR_FIELD_NAME, errType);
4746
return Results.err(err);
4847
} else {
49-
Object ok = deserializeValue(objectMapper, node, OK_FIELD_NAME, okType);
48+
Object ok = deserializeValue(codec, node, OK_FIELD_NAME, okType);
5049
return Results.ok(ok);
5150
}
5251
}
5352

5453
private static Object deserializeValue(
55-
ObjectMapper objectMapper,
54+
ObjectCodec codec,
5655
ObjectNode node,
5756
String fieldName,
5857
JavaType type
@@ -62,7 +61,7 @@ private static Object deserializeValue(
6261
// Our version of Jackson doesn't allow custom deserialization of null
6362
return NullValue.get();
6463
} else {
65-
return objectMapper.readerFor(type).readValue(valueNode);
64+
return codec.readValue(valueNode.traverse(codec), type);
6665
}
6766
}
6867
}

0 commit comments

Comments
 (0)