|
6 | 6 | import com.fasterxml.jackson.databind.*;
|
7 | 7 | import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
|
8 | 8 | import com.fasterxml.jackson.databind.node.*;
|
| 9 | +import com.fasterxml.jackson.databind.util.RawValue; |
9 | 10 |
|
10 | 11 | /**
|
11 | 12 | * Deserializer that can build instances of {@link JsonNode} from any
|
@@ -225,6 +226,9 @@ protected final ObjectNode deserializeObject(JsonParser p, DeserializationContex
|
225 | 226 | case JsonTokenId.ID_START_ARRAY:
|
226 | 227 | value = deserializeArray(p, ctxt, nodeFactory);
|
227 | 228 | break;
|
| 229 | + case JsonTokenId.ID_EMBEDDED_OBJECT: |
| 230 | + value = _fromEmbedded(p, ctxt, nodeFactory); |
| 231 | + break; |
228 | 232 | case JsonTokenId.ID_STRING:
|
229 | 233 | value = nodeFactory.textNode(p.getText());
|
230 | 234 | break;
|
@@ -270,6 +274,8 @@ protected final ArrayNode deserializeArray(JsonParser p, DeserializationContext
|
270 | 274 | break;
|
271 | 275 | case JsonTokenId.ID_END_ARRAY:
|
272 | 276 | return node;
|
| 277 | + case JsonTokenId.ID_EMBEDDED_OBJECT: |
| 278 | + node.add(_fromEmbedded(p, ctxt, nodeFactory)); |
273 | 279 | case JsonTokenId.ID_STRING:
|
274 | 280 | node.add(nodeFactory.textNode(p.getText()));
|
275 | 281 | break;
|
@@ -376,7 +382,11 @@ protected final JsonNode _fromEmbedded(JsonParser p, DeserializationContext ctxt
|
376 | 382 | if (type == byte[].class) { // most common special case
|
377 | 383 | return nodeFactory.binaryNode((byte[]) ob);
|
378 | 384 | }
|
379 |
| - if (JsonNode.class.isAssignableFrom(type)) { |
| 385 | + // [databind#743]: Don't forget RawValue |
| 386 | + if (ob instanceof RawValue) { |
| 387 | + return nodeFactory.rawValueNode((RawValue) ob); |
| 388 | + } |
| 389 | + if (ob instanceof JsonNode) { |
380 | 390 | // [Issue#433]: but could also be a JsonNode hiding in there!
|
381 | 391 | return (JsonNode) ob;
|
382 | 392 | }
|
|
0 commit comments