Skip to content

Commit 534fa03

Browse files
committed
Add test demonstrating field id case
1 parent 5921983 commit 534fa03

File tree

3 files changed

+127
-0
lines changed

3 files changed

+127
-0
lines changed

msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackGenerator.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,13 @@ private void writeByteArrayTextKey(byte[] text, int offset, int len) throws IOEx
513513
addValueNode(new String(text, offset, len, DEFAULT_CHARSET));
514514
}
515515

516+
// TODO: Uncomment
517+
//@Override
518+
//public void writeFieldId(long id) throws IOException
519+
//{
520+
// addKeyToStackTop(id);
521+
//}
522+
516523
@Override
517524
public void writeFieldName(String name)
518525
{

msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackParser.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,11 @@ public String currentName()
621621
return streamReadContext.getCurrentName();
622622
}
623623

624+
// TODO: Uncomment
625+
//public boolean isCurrentFieldId() {
626+
// return this.type == Type.INT || this.type == Type.LONG;
627+
//}
628+
624629
@Override
625630
public String getCurrentName()
626631
throws IOException
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
//
2+
// MessagePack for Java
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
//
16+
package org.msgpack.jackson.dataformat;
17+
18+
import com.fasterxml.jackson.databind.ObjectMapper;
19+
import com.fasterxml.jackson.core.JsonParser;
20+
import com.fasterxml.jackson.core.type.TypeReference;
21+
import com.fasterxml.jackson.databind.DeserializationContext;
22+
import com.fasterxml.jackson.databind.JsonDeserializer;
23+
import com.fasterxml.jackson.databind.KeyDeserializer;
24+
import com.fasterxml.jackson.databind.ObjectMapper;
25+
import com.fasterxml.jackson.databind.deser.NullValueProvider;
26+
import com.fasterxml.jackson.databind.deser.impl.JDKValueInstantiators;
27+
import com.fasterxml.jackson.databind.deser.std.MapDeserializer;
28+
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
29+
import com.fasterxml.jackson.databind.module.SimpleModule;
30+
import com.fasterxml.jackson.databind.type.TypeFactory;
31+
32+
import java.io.ByteArrayInputStream;
33+
import java.io.ByteArrayOutputStream;
34+
import java.io.File;
35+
import java.io.FileOutputStream;
36+
import java.io.IOException;
37+
import java.io.OutputStream;
38+
import java.math.BigInteger;
39+
import java.util.ArrayList;
40+
import java.util.Arrays;
41+
import java.util.HashMap;
42+
import java.util.List;
43+
import java.util.Map;
44+
import java.util.Set;
45+
import java.util.Collections;
46+
import java.util.LinkedHashMap;
47+
48+
import static org.junit.Assert.assertEquals;
49+
50+
public class MessagePackDataformatForFieldIdTest
51+
{
52+
53+
static class MessagePackMapDeserializer extends MapDeserializer
54+
{
55+
56+
public static KeyDeserializer keyDeserializer = new KeyDeserializer()
57+
{
58+
59+
@Override
60+
public Object deserializeKey(String s, DeserializationContext deserializationContext)
61+
throws IOException
62+
{
63+
JsonParser parser = deserializationContext.getParser();
64+
if (parser instanceof MessagePackParser p) {
65+
// TODO: Uncomment
66+
//if (p.isCurrentFieldId()) {
67+
// return Integer.valueOf(s);
68+
//}
69+
}
70+
return s;
71+
}
72+
};
73+
74+
public MessagePackMapDeserializer()
75+
{
76+
super(
77+
TypeFactory.defaultInstance().constructMapType(Map.class, Object.class, Object.class),
78+
JDKValueInstantiators.findStdValueInstantiator(null, LinkedHashMap.class),
79+
keyDeserializer, null, null);
80+
}
81+
82+
public MessagePackMapDeserializer(MapDeserializer src, KeyDeserializer keyDeser,
83+
JsonDeserializer<Object> valueDeser, TypeDeserializer valueTypeDeser, NullValueProvider nuller,
84+
Set<String> ignorable, Set<String> includable)
85+
{
86+
super(src, keyDeser, valueDeser, valueTypeDeser, nuller, ignorable, includable);
87+
}
88+
89+
@Override
90+
protected MapDeserializer withResolved(KeyDeserializer keyDeser, TypeDeserializer valueTypeDeser,
91+
JsonDeserializer<?> valueDeser, NullValueProvider nuller, Set<String> ignorable,
92+
Set<String> includable)
93+
{
94+
return new MessagePackMapDeserializer(this, keyDeser, (JsonDeserializer<Object>) valueDeser, valueTypeDeser,
95+
nuller, ignorable, includable);
96+
}
97+
}
98+
99+
@Test
100+
public void mixed()
101+
{
102+
ObjectMapper mapper = new ObjectMapper(new MessagePackFactory())
103+
.registerModule(new SimpleModule()
104+
.addDeserializer(Map.class, new MessagePackMapDeserializer()));
105+
106+
Map<Object, Object> map = new HashMap<>();
107+
map.put(1, "one");
108+
map.put("2", "two");
109+
110+
byte[] bytes = mapper.writeValueAsBytes(map);
111+
Map<Object, Object> deserialized = mapper.readValue(bytes, new TypeReference<Map<Object, Object>>() {});
112+
113+
assertEquals(map, deserialized);
114+
}
115+
}

0 commit comments

Comments
 (0)