|
1 | 1 | package com.fasterxml.jackson.dataformat.ion.ionvalue;
|
2 | 2 |
|
| 3 | +import com.amazon.ion.IonList; |
3 | 4 | import com.amazon.ion.IonSystem;
|
4 | 5 | import com.amazon.ion.IonValue;
|
5 | 6 | import com.amazon.ion.IonStruct;
|
6 | 7 | import com.amazon.ion.system.IonSystemBuilder;
|
7 | 8 | import com.fasterxml.jackson.annotation.JsonAnyGetter;
|
8 | 9 | import com.fasterxml.jackson.annotation.JsonAnySetter;
|
| 10 | +import com.fasterxml.jackson.annotation.JsonInclude; |
9 | 11 | import com.fasterxml.jackson.annotation.JsonProperty;
|
| 12 | +import com.fasterxml.jackson.databind.ObjectWriter; |
10 | 13 | import com.fasterxml.jackson.databind.util.AccessPattern;
|
11 | 14 | import com.fasterxml.jackson.dataformat.ion.IonObjectMapper;
|
12 | 15 | import com.fasterxml.jackson.dataformat.ion.IonParser;
|
@@ -73,7 +76,8 @@ static class IonValueData extends Data<IonValue> {
|
73 | 76 | }
|
74 | 77 |
|
75 | 78 | private static final IonSystem SYSTEM = IonSystemBuilder.standard().build();
|
76 |
| - private final IonValueMapper ION_VALUE_MAPPER = new IonValueMapper(SYSTEM, SNAKE_CASE); |
| 79 | + private static final IonValueMapper ION_VALUE_MAPPER = new IonValueMapper(SYSTEM, SNAKE_CASE); |
| 80 | + private static final IonValueMapper ION_MAPPER_READ_NULL_DISABLED = (IonValueMapper) new IonValueMapper(SYSTEM, SNAKE_CASE).disable(IonParser.Feature.READ_NULL_AS_IONVALUE); |
77 | 81 |
|
78 | 82 | @Test
|
79 | 83 | public void shouldBeAbleToDeserialize() throws Exception {
|
@@ -101,45 +105,43 @@ public void shouldBeAbleToDeserializeIncludingNullList() throws Exception {
|
101 | 105 |
|
102 | 106 | @Test
|
103 | 107 | public void shouldBeAbleToDeserializeNullToIonNull() throws Exception {
|
104 |
| - String ion = "{c:null}"; |
105 |
| - verifyNullDeserialization(ion, SYSTEM.newNull()); |
106 |
| - ION_VALUE_MAPPER.disable(IonParser.Feature.READ_NULL_AS_IONVALUE); |
107 |
| - verifyNullDeserialization(ion, null); |
| 108 | + verifyNullDeserialization("{c:null}", SYSTEM.newNull(), null); |
108 | 109 | }
|
109 | 110 |
|
110 | 111 | @Test
|
111 | 112 | public void shouldBeAbleToDeserializeNullList() throws Exception {
|
112 |
| - String ion = "{c:null.list}"; |
113 |
| - verifyNullDeserialization(ion, SYSTEM.newNullList()); |
114 |
| - ION_VALUE_MAPPER.disable(IonParser.Feature.READ_NULL_AS_IONVALUE); |
115 |
| - verifyNullDeserialization(ion, SYSTEM.newNullList()); |
| 113 | + verifyNullDeserialization("{c:null.list}", SYSTEM.newNullList()); |
116 | 114 | }
|
117 | 115 |
|
| 116 | + |
| 117 | + |
118 | 118 | @Test
|
119 | 119 | public void shouldBeAbleToDeserializeNullStruct() throws Exception {
|
120 |
| - String ion = "{c:null.struct}"; |
121 |
| - verifyNullDeserialization(ion, SYSTEM.newNullStruct()); |
122 |
| - ION_VALUE_MAPPER.disable(IonParser.Feature.READ_NULL_AS_IONVALUE); |
123 |
| - verifyNullDeserialization(ion, SYSTEM.newNullStruct()); |
| 120 | + verifyNullDeserialization("{c:null.struct}", SYSTEM.newNullStruct()); |
124 | 121 | }
|
125 | 122 |
|
126 | 123 | @Test
|
127 | 124 | public void shouldBeAbleToDeserializeNullSexp() throws Exception {
|
128 |
| - String ion = "{c:null.sexp}"; |
129 |
| - verifyNullDeserialization(ion, SYSTEM.newNullSexp()); |
130 |
| - ION_VALUE_MAPPER.disable(IonParser.Feature.READ_NULL_AS_IONVALUE); |
131 |
| - verifyNullDeserialization(ion, SYSTEM.newNullSexp()); |
| 125 | + verifyNullDeserialization("{c:null.sexp}", SYSTEM.newNullSexp()); |
132 | 126 | }
|
133 | 127 |
|
134 | 128 | private void verifyNullDeserialization(String ionString, IonValue expected) throws Exception {
|
| 129 | + verifyNullDeserialization(ionString, expected, expected); |
| 130 | + } |
| 131 | + |
| 132 | + private void verifyNullDeserialization(String ionString, IonValue expected, IonValue expectedReadNullDisabled) throws Exception { |
| 133 | + verifyNullDeserialization(ION_VALUE_MAPPER, ionString, expected); |
| 134 | + verifyNullDeserialization(ION_MAPPER_READ_NULL_DISABLED, ionString, expectedReadNullDisabled); |
| 135 | + } |
135 | 136 |
|
136 |
| - IonValueData data = ION_VALUE_MAPPER.readValue(ionString, IonValueData.class); |
| 137 | + private void verifyNullDeserialization(IonValueMapper mapper, String ionString, IonValue expected) throws Exception { |
| 138 | + IonValueData data = mapper.readValue(ionString, IonValueData.class); |
137 | 139 |
|
138 | 140 | assertEquals(1, data.getAllData().size());
|
139 | 141 | assertEquals(expected, data.getAllData().get("c"));
|
140 | 142 |
|
141 | 143 | IonValue ion = ion(ionString);
|
142 |
| - data = ION_VALUE_MAPPER.readValue(ion, IonValueData.class); |
| 144 | + data = mapper.readValue(ion, IonValueData.class); |
143 | 145 |
|
144 | 146 | assertEquals(1, data.getAllData().size());
|
145 | 147 | assertEquals(expected, data.getAllData().get("c"));
|
@@ -188,6 +190,22 @@ public void shouldBeAbleToSerializeAndDeserializePojo() throws Exception {
|
188 | 190 | assertEquals(source, result);
|
189 | 191 | }
|
190 | 192 |
|
| 193 | + @Test |
| 194 | + public void shouldBeAbleToSerializeAndDeserializeIonValueDataWithIncludeNonNull() throws Exception { |
| 195 | + IonValueData source = new IonValueData(); |
| 196 | + source.put("a", SYSTEM.newInt(1)); |
| 197 | + source.put("b", SYSTEM.newNull()); |
| 198 | + source.put("c", null); |
| 199 | + IonValueMapper mapper = (IonValueMapper) ION_VALUE_MAPPER.copy().setSerializationInclusion(JsonInclude.Include.NON_NULL); |
| 200 | + |
| 201 | + String data = mapper.writeValueAsString(source); |
| 202 | + assertEquals("{a:1,b:null}", data); |
| 203 | + // Now remove the null element for the comparison below. |
| 204 | + source.getAllData().remove("c"); |
| 205 | + IonValueData result = mapper.readValue(data, IonValueData.class); |
| 206 | + assertEquals(source, result); |
| 207 | + } |
| 208 | + |
191 | 209 | @Test
|
192 | 210 | public void shouldBeAbleToSerializeAndDeserializeStringData() throws Exception {
|
193 | 211 | StringData source = new StringData();
|
|
0 commit comments