• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.databind;
2 
3 import java.io.*;
4 
5 import com.fasterxml.jackson.databind.node.ArrayNode;
6 import com.fasterxml.jackson.databind.node.ObjectNode;
7 
8 public class TestNodeJDKSerialization extends BaseMapTest
9 {
10     private final ObjectMapper MAPPER = newJsonMapper();
11 
12     /*
13     /**********************************************************
14     /* Then something bit different; serialize `JsonNode`(s)
15     /**********************************************************
16      */
17 
18     // [databind#18]: Allow JDK serialization of `ObjectNode`
testObjectNodeSerialization()19     public void testObjectNodeSerialization() throws Exception
20     {
21         ObjectNode root = MAPPER.createObjectNode();
22         root.put("answer", 42);
23         ArrayNode arr = root.withArray("matrix");
24         arr.add(1).add(12345678901L).add(true).add("...");
25         ObjectNode misc = root.with("misc");
26         misc.put("value", 0.25);
27 
28         testNodeRoundtrip(root);
29     }
30 
31     // [databind#18]: Allow JDK serialization of `ArrayNode`
testArrayNodeSerialization()32     public void testArrayNodeSerialization() throws Exception
33     {
34         ArrayNode root = MAPPER.createArrayNode();
35         root.add(false);
36         ObjectNode props = root.addObject();
37         props.put("answer", 42);
38         root.add(137);
39 
40         testNodeRoundtrip(root);
41     }
42 
43     // and then also some scalar types
testScalarSerialization()44     public void testScalarSerialization() throws Exception
45     {
46         testNodeRoundtrip(MAPPER.getNodeFactory().nullNode());
47 
48         testNodeRoundtrip(MAPPER.getNodeFactory().textNode("Foobar"));
49 
50         testNodeRoundtrip(MAPPER.getNodeFactory().booleanNode(true));
51         testNodeRoundtrip(MAPPER.getNodeFactory().booleanNode(false));
52 
53         testNodeRoundtrip(MAPPER.getNodeFactory().numberNode(123));
54         testNodeRoundtrip(MAPPER.getNodeFactory().numberNode(-12345678901234L));
55     }
56 
57     /*
58     /**********************************************************
59     /* Helper methods
60     /**********************************************************
61      */
62 
testNodeRoundtrip(JsonNode input)63     protected void testNodeRoundtrip(JsonNode input) throws Exception
64     {
65         byte[] ser = jdkSerialize(input);
66         JsonNode result = jdkDeserialize(ser);
67         assertEquals(input, result);
68     }
69 
jdkSerialize(Object o)70     protected byte[] jdkSerialize(Object o) throws IOException
71     {
72         ByteArrayOutputStream bytes = new ByteArrayOutputStream(1000);
73         ObjectOutputStream obOut = new ObjectOutputStream(bytes);
74         obOut.writeObject(o);
75         obOut.close();
76         return bytes.toByteArray();
77     }
78 
79     @SuppressWarnings("unchecked")
jdkDeserialize(byte[] raw)80     protected <T> T jdkDeserialize(byte[] raw) throws IOException
81     {
82         ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(raw));
83         try {
84             return (T) objIn.readObject();
85         } catch (ClassNotFoundException e) {
86             fail("Missing class: "+e.getMessage());
87             return null;
88         } finally {
89             objIn.close();
90         }
91     }
92 }
93