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