From 5c1e29bcc6d0d00d16086acdb1a78100032d43e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Wed, 13 Apr 2016 10:40:17 +0800 Subject: [PATCH] add FieldTypeResolver support --- .../fastjson/parser/DefaultJSONParser.java | 26 ++- .../alibaba/fastjson/parser/ParserConfig.java | 18 +- .../deserializer/FieldTypeResolver.java | 7 + .../deserializer/MapDeserializer.java} | 207 +----------------- .../fastjson/serializer/MapSerializer.java | 207 ++++++++++++++++++ .../fastjson/serializer/SerializeConfig.java | 2 +- .../json/bvt/bug/Bug_for_issue_273.java | 15 ++ .../bvt/serializer/MapSerializerTest.java | 22 +- 8 files changed, 282 insertions(+), 222 deletions(-) create mode 100644 src/main/java/com/alibaba/fastjson/parser/deserializer/FieldTypeResolver.java rename src/main/java/com/alibaba/fastjson/{serializer/MapCodec.java => parser/deserializer/MapDeserializer.java} (60%) mode change 100755 => 100644 create mode 100755 src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java create mode 100644 src/test/java/com/alibaba/json/bvt/bug/Bug_for_issue_273.java diff --git a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java index 550528b769..95d6a8effd 100755 --- a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java +++ b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java @@ -60,6 +60,7 @@ import com.alibaba.fastjson.parser.deserializer.ExtraProcessor; import com.alibaba.fastjson.parser.deserializer.ExtraTypeProvider; import com.alibaba.fastjson.parser.deserializer.FieldDeserializer; +import com.alibaba.fastjson.parser.deserializer.FieldTypeResolver; import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import com.alibaba.fastjson.parser.deserializer.ResolveFieldDeserializer; @@ -99,6 +100,7 @@ public class DefaultJSONParser implements Closeable { private List extraTypeProviders = null; private List extraProcessors = null; + protected FieldTypeResolver fieldTypeResolver = null; static { primitiveClasses.add(boolean.class); @@ -448,7 +450,21 @@ public final Object parseObject(final Map object, Object fieldName) { ctxLocal = setContext(context, input, key); } - Object obj = this.parseObject(input, key); + Object obj = null; + boolean objParsed = false; + if (fieldTypeResolver != null) { + String resolveFieldName = key != null ? key.toString() : null; + Type fieldType = fieldTypeResolver.resolve(object, resolveFieldName); + if (fieldType != null) { + ObjectDeserializer fieldDeser = config.getDeserializer(fieldType); + obj = fieldDeser.deserialze(this, fieldType, key); + objParsed = true; + } + } + if (!objParsed) { + obj = this.parseObject(input, key); + } + if (ctxLocal != null && input != obj) { ctxLocal.object = object; } @@ -1167,6 +1183,14 @@ public List getExtraTypeProviders() { public List getExtraTypeProvidersDirect() { return extraTypeProviders; } + + public FieldTypeResolver getFieldTypeResolver() { + return fieldTypeResolver; + } + + public void setFieldTypeResolver(FieldTypeResolver fieldTypeResolver) { + this.fieldTypeResolver = fieldTypeResolver; + } public void setContext(ParseContext context) { if (lexer.isEnabled(Feature.DisableCircularReferenceDetect)) { diff --git a/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java b/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java index 458b073422..3f0cfeee4a 100644 --- a/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java +++ b/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java @@ -77,6 +77,7 @@ import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer; import com.alibaba.fastjson.parser.deserializer.JavaObjectDeserializer; import com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec; +import com.alibaba.fastjson.parser.deserializer.MapDeserializer; import com.alibaba.fastjson.parser.deserializer.NumberDeserializer; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import com.alibaba.fastjson.parser.deserializer.OptionalCodec; @@ -99,7 +100,6 @@ import com.alibaba.fastjson.serializer.FloatCodec; import com.alibaba.fastjson.serializer.IntegerCodec; import com.alibaba.fastjson.serializer.LongCodec; -import com.alibaba.fastjson.serializer.MapCodec; import com.alibaba.fastjson.serializer.MiscCodec; import com.alibaba.fastjson.serializer.ObjectArrayCodec; import com.alibaba.fastjson.serializer.ReferenceCodec; @@ -180,15 +180,15 @@ private ParserConfig(ASMDeserializerFactory asmFactory, ClassLoader parentClassL derializers.put(java.util.Date.class, DateCodec.instance); derializers.put(Calendar.class, CalendarCodec.instance); - derializers.put(JSONObject.class, MapCodec.instance); + derializers.put(JSONObject.class, MapDeserializer.instance); derializers.put(JSONArray.class, CollectionCodec.instance); - derializers.put(Map.class, MapCodec.instance); - derializers.put(HashMap.class, MapCodec.instance); - derializers.put(LinkedHashMap.class, MapCodec.instance); - derializers.put(TreeMap.class, MapCodec.instance); - derializers.put(ConcurrentMap.class, MapCodec.instance); - derializers.put(ConcurrentHashMap.class, MapCodec.instance); + derializers.put(Map.class, MapDeserializer.instance); + derializers.put(HashMap.class, MapDeserializer.instance); + derializers.put(LinkedHashMap.class, MapDeserializer.instance); + derializers.put(TreeMap.class, MapDeserializer.instance); + derializers.put(ConcurrentMap.class, MapDeserializer.instance); + derializers.put(ConcurrentHashMap.class, MapDeserializer.instance); derializers.put(Collection.class, CollectionCodec.instance); derializers.put(List.class, CollectionCodec.instance); @@ -405,7 +405,7 @@ public ObjectDeserializer getDeserializer(Class clazz, Type type) { } else if (Collection.class.isAssignableFrom(clazz)) { derializer = CollectionCodec.instance; } else if (Map.class.isAssignableFrom(clazz)) { - derializer = MapCodec.instance; + derializer = MapDeserializer.instance; } else if (Throwable.class.isAssignableFrom(clazz)) { derializer = new ThrowableDeserializer(this, clazz); } else { diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/FieldTypeResolver.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/FieldTypeResolver.java new file mode 100644 index 0000000000..0342442206 --- /dev/null +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/FieldTypeResolver.java @@ -0,0 +1,7 @@ +package com.alibaba.fastjson.parser.deserializer; + +import java.lang.reflect.Type; + +public interface FieldTypeResolver extends ParseProcess { + Type resolve(Object object, String fieldName); +} diff --git a/src/main/java/com/alibaba/fastjson/serializer/MapCodec.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/MapDeserializer.java old mode 100755 new mode 100644 similarity index 60% rename from src/main/java/com/alibaba/fastjson/serializer/MapCodec.java rename to src/main/java/com/alibaba/fastjson/parser/deserializer/MapDeserializer.java index f163af2285..f36d913c37 --- a/src/main/java/com/alibaba/fastjson/serializer/MapCodec.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/MapDeserializer.java @@ -1,28 +1,11 @@ -/* - * Copyright 1999-2101 Alibaba Group. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.fastjson.serializer; - -import java.io.IOException; +package com.alibaba.fastjson.parser.deserializer; + import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Hashtable; import java.util.IdentityHashMap; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.Properties; import java.util.SortedMap; @@ -39,192 +22,15 @@ import com.alibaba.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.JSONToken; import com.alibaba.fastjson.parser.ParseContext; -import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import com.alibaba.fastjson.util.TypeUtils; -/** - * @author wenshao[szujobs@hotmail.com] - */ -public class MapCodec implements ObjectSerializer, ObjectDeserializer { - - public static MapCodec instance = new MapCodec(); - - @SuppressWarnings({ "rawtypes"}) - public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { - SerializeWriter out = serializer.out; - - if (object == null) { - out.writeNull(); - return; - } - - Map map = (Map) object; - -// if (out.isEnabled(SerializerFeature.SortField)) { -// if ((!(map instanceof SortedMap)) && !(map instanceof LinkedHashMap)) { -// try { -// map = new TreeMap(map); -// } catch (Exception ex) { -// // skip -// } -// } -// } - - if (serializer.containsReference(object)) { - serializer.writeReference(object); - return; - } - - SerialContext parent = serializer.context; - serializer.setContext(parent, object, fieldName, 0); - try { - out.write('{'); - - serializer.incrementIndent(); - - Class preClazz = null; - ObjectSerializer preWriter = null; - - boolean first = true; - - if (out.isEnabled(SerializerFeature.WriteClassName)) { - Class mapClass = map.getClass(); - boolean containsKey = (mapClass == JSONObject.class || mapClass == HashMap.class || mapClass == LinkedHashMap.class) - && map.containsKey(JSON.DEFAULT_TYPE_KEY); - if (!containsKey) { - out.writeFieldName(JSON.DEFAULT_TYPE_KEY); - out.writeString(object.getClass().getName()); - first = false; - } - } - - for (Map.Entry entry : map.entrySet()) { - Object value = entry.getValue(); - - Object entryKey = entry.getKey(); - - { - List preFilters = serializer.propertyPreFilters; - if (preFilters != null && preFilters.size() > 0) { - if (entryKey == null || entryKey instanceof String) { - if (!FilterUtils.applyName(serializer, object, (String) entryKey)) { - continue; - } - } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); - if (!FilterUtils.applyName(serializer, object, strKey)) { - continue; - } - } - } - } - - { - List propertyFilters = serializer.propertyFilters; - if (propertyFilters != null && propertyFilters.size() > 0) { - if (entryKey == null || entryKey instanceof String) { - if (!FilterUtils.apply(serializer, object, (String) entryKey, value)) { - continue; - } - } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); - if (!FilterUtils.apply(serializer, object, strKey, value)) { - continue; - } - } - } - } - - { - List nameFilters = serializer.nameFilters; - if (nameFilters != null && nameFilters.size() > 0) { - if (entryKey == null || entryKey instanceof String) { - entryKey = FilterUtils.processKey(serializer, object, (String) entryKey, value); - } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); - entryKey = FilterUtils.processKey(serializer, object, strKey, value); - } - } - } - - { - List valueFilters = serializer.valueFilters; - if (valueFilters != null && valueFilters.size() > 0) { - if (entryKey == null || entryKey instanceof String) { - value = FilterUtils.processValue(serializer, object, (String) entryKey, value); - } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { - String strKey = JSON.toJSONString(entryKey); - value = FilterUtils.processValue(serializer, object, strKey, value); - } - } - } - - if (value == null) { - if (!out.isEnabled(SerializerFeature.WriteMapNullValue)) { - continue; - } - } - - if (entryKey instanceof String) { - String key = (String) entryKey; - - if (!first) { - out.write(','); - } - - if (out.isEnabled(SerializerFeature.PrettyFormat)) { - serializer.println(); - } - out.writeFieldName(key, true); - } else { - if (!first) { - out.write(','); - } - - if (out.isEnabled(SerializerFeature.BrowserCompatible) - || out.isEnabled(SerializerFeature.WriteNonStringKeyAsString) - || out.isEnabled(SerializerFeature.BrowserSecure)) { - String strEntryKey = JSON.toJSONString(entryKey); - serializer.write(strEntryKey); - } else { - serializer.write(entryKey); - } - - out.write(':'); - } - - first = false; - - if (value == null) { - out.writeNull(); - continue; - } - - Class clazz = value.getClass(); - - if (clazz == preClazz) { - preWriter.write(serializer, value, entryKey, null, 0); - } else { - preClazz = clazz; - preWriter = serializer.getObjectWriter(clazz); - - preWriter.write(serializer, value, entryKey, null, 0); - } - } - } finally { - serializer.context = parent; - } - - serializer.decrementIdent(); - if (out.isEnabled(SerializerFeature.PrettyFormat) && map.size() > 0) { - serializer.println(); - } - out.write('}'); - } +public class MapDeserializer implements ObjectDeserializer { + public static MapDeserializer instance = new MapDeserializer(); + @SuppressWarnings("unchecked") public T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { - if (type == JSONObject.class) { + if (type == JSONObject.class && parser.getFieldTypeResolver() == null) { return (T) parser.parseObject(); } @@ -525,6 +331,7 @@ protected Map createMap(Type type) { throw new JSONException("unsupport type " + type, e); } } + public int getFastMatchToken() { return JSONToken.LBRACE; diff --git a/src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java b/src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java new file mode 100755 index 0000000000..d19226f542 --- /dev/null +++ b/src/main/java/com/alibaba/fastjson/serializer/MapSerializer.java @@ -0,0 +1,207 @@ +/* + * Copyright 1999-2101 Alibaba Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.fastjson.serializer; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +/** + * @author wenshao[szujobs@hotmail.com] + */ +public class MapSerializer implements ObjectSerializer { + + public static MapSerializer instance = new MapSerializer(); + + @SuppressWarnings({ "rawtypes"}) + public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { + SerializeWriter out = serializer.out; + + if (object == null) { + out.writeNull(); + return; + } + + Map map = (Map) object; + +// if (out.isEnabled(SerializerFeature.SortField)) { +// if ((!(map instanceof SortedMap)) && !(map instanceof LinkedHashMap)) { +// try { +// map = new TreeMap(map); +// } catch (Exception ex) { +// // skip +// } +// } +// } + + if (serializer.containsReference(object)) { + serializer.writeReference(object); + return; + } + + SerialContext parent = serializer.context; + serializer.setContext(parent, object, fieldName, 0); + try { + out.write('{'); + + serializer.incrementIndent(); + + Class preClazz = null; + ObjectSerializer preWriter = null; + + boolean first = true; + + if (out.isEnabled(SerializerFeature.WriteClassName)) { + Class mapClass = map.getClass(); + boolean containsKey = (mapClass == JSONObject.class || mapClass == HashMap.class || mapClass == LinkedHashMap.class) + && map.containsKey(JSON.DEFAULT_TYPE_KEY); + if (!containsKey) { + out.writeFieldName(JSON.DEFAULT_TYPE_KEY); + out.writeString(object.getClass().getName()); + first = false; + } + } + + for (Map.Entry entry : map.entrySet()) { + Object value = entry.getValue(); + + Object entryKey = entry.getKey(); + + { + List preFilters = serializer.propertyPreFilters; + if (preFilters != null && preFilters.size() > 0) { + if (entryKey == null || entryKey instanceof String) { + if (!FilterUtils.applyName(serializer, object, (String) entryKey)) { + continue; + } + } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { + String strKey = JSON.toJSONString(entryKey); + if (!FilterUtils.applyName(serializer, object, strKey)) { + continue; + } + } + } + } + + { + List propertyFilters = serializer.propertyFilters; + if (propertyFilters != null && propertyFilters.size() > 0) { + if (entryKey == null || entryKey instanceof String) { + if (!FilterUtils.apply(serializer, object, (String) entryKey, value)) { + continue; + } + } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { + String strKey = JSON.toJSONString(entryKey); + if (!FilterUtils.apply(serializer, object, strKey, value)) { + continue; + } + } + } + } + + { + List nameFilters = serializer.nameFilters; + if (nameFilters != null && nameFilters.size() > 0) { + if (entryKey == null || entryKey instanceof String) { + entryKey = FilterUtils.processKey(serializer, object, (String) entryKey, value); + } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { + String strKey = JSON.toJSONString(entryKey); + entryKey = FilterUtils.processKey(serializer, object, strKey, value); + } + } + } + + { + List valueFilters = serializer.valueFilters; + if (valueFilters != null && valueFilters.size() > 0) { + if (entryKey == null || entryKey instanceof String) { + value = FilterUtils.processValue(serializer, object, (String) entryKey, value); + } else if (entryKey.getClass().isPrimitive() || entryKey instanceof Number) { + String strKey = JSON.toJSONString(entryKey); + value = FilterUtils.processValue(serializer, object, strKey, value); + } + } + } + + if (value == null) { + if (!out.isEnabled(SerializerFeature.WriteMapNullValue)) { + continue; + } + } + + if (entryKey instanceof String) { + String key = (String) entryKey; + + if (!first) { + out.write(','); + } + + if (out.isEnabled(SerializerFeature.PrettyFormat)) { + serializer.println(); + } + out.writeFieldName(key, true); + } else { + if (!first) { + out.write(','); + } + + if (out.isEnabled(SerializerFeature.BrowserCompatible) + || out.isEnabled(SerializerFeature.WriteNonStringKeyAsString) + || out.isEnabled(SerializerFeature.BrowserSecure)) { + String strEntryKey = JSON.toJSONString(entryKey); + serializer.write(strEntryKey); + } else { + serializer.write(entryKey); + } + + out.write(':'); + } + + first = false; + + if (value == null) { + out.writeNull(); + continue; + } + + Class clazz = value.getClass(); + + if (clazz == preClazz) { + preWriter.write(serializer, value, entryKey, null, 0); + } else { + preClazz = clazz; + preWriter = serializer.getObjectWriter(clazz); + + preWriter.write(serializer, value, entryKey, null, 0); + } + } + } finally { + serializer.context = parent; + } + + serializer.decrementIdent(); + if (out.isEnabled(SerializerFeature.PrettyFormat) && map.size() > 0) { + serializer.println(); + } + out.write('}'); + } +} diff --git a/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java b/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java index a374466a0c..472ba30885 100644 --- a/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java +++ b/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java @@ -327,7 +327,7 @@ public ObjectSerializer getObjectWriter(Class clazz) { if (writer == null) { if (Map.class.isAssignableFrom(clazz)) { - put(clazz, MapCodec.instance); + put(clazz, MapSerializer.instance); } else if (List.class.isAssignableFrom(clazz)) { put(clazz, ListSerializer.instance); } else if (Collection.class.isAssignableFrom(clazz)) { diff --git a/src/test/java/com/alibaba/json/bvt/bug/Bug_for_issue_273.java b/src/test/java/com/alibaba/json/bvt/bug/Bug_for_issue_273.java new file mode 100644 index 0000000000..666dc60d9d --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/bug/Bug_for_issue_273.java @@ -0,0 +1,15 @@ +package com.alibaba.json.bvt.bug; + +import com.alibaba.fastjson.JSON; + +import junit.framework.TestCase; + +public class Bug_for_issue_273 extends TestCase { + public void test_for_issue() throws Exception { + JSON.parseObject("{\"value\":\"\0x16\0x26\"}"); + } + + public static class VO { + public String value; + } +} diff --git a/src/test/java/com/alibaba/json/bvt/serializer/MapSerializerTest.java b/src/test/java/com/alibaba/json/bvt/serializer/MapSerializerTest.java index ad441c3736..02b3f837c4 100755 --- a/src/test/java/com/alibaba/json/bvt/serializer/MapSerializerTest.java +++ b/src/test/java/com/alibaba/json/bvt/serializer/MapSerializerTest.java @@ -10,7 +10,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.JSONSerializer; -import com.alibaba.fastjson.serializer.MapCodec; +import com.alibaba.fastjson.serializer.MapSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; import com.alibaba.fastjson.serializer.SerializerFeature; @@ -19,7 +19,7 @@ public class MapSerializerTest extends TestCase { public void test_empty_1() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); mapSerializer.write(new JSONSerializer(out), Collections.EMPTY_MAP, null, null, 0); Assert.assertEquals("{}", out.toString()); @@ -28,7 +28,7 @@ public void test_empty_1() throws Exception { public void test_singleton_1() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); mapSerializer.write(new JSONSerializer(out), Collections.singletonMap("A", 1), null, null, 0); Assert.assertEquals("{\"A\":1}", out.toString()); @@ -37,7 +37,7 @@ public void test_singleton_1() throws Exception { public void test_int2_s() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); Map map = new LinkedHashMap(); map.put("A", 1); map.put("B", 2); @@ -49,7 +49,7 @@ public void test_int2_s() throws Exception { public void test_long2_s() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); Map map = new LinkedHashMap(); map.put("A", 1L); map.put("B", 2L); @@ -61,7 +61,7 @@ public void test_long2_s() throws Exception { public void test_string2_s() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); Map map = new LinkedHashMap(); map.put("A", "1"); map.put("B", "2"); @@ -76,7 +76,7 @@ public void test_string3_s() throws Exception { JSONSerializer serializer = new JSONSerializer(out); serializer.config(SerializerFeature.UseSingleQuotes, true); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); Map map = new LinkedHashMap(); map.put("A", "1"); map.put("B", "2"); @@ -88,7 +88,7 @@ public void test_string3_s() throws Exception { public void test_special_s() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); mapSerializer.write(new JSONSerializer(out), Collections.singletonMap("A\nB", 1), null, null, 0); Assert.assertEquals("{\"A\\nB\":1}", out.toString()); @@ -97,7 +97,7 @@ public void test_special_s() throws Exception { public void test_special2_s() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); mapSerializer.write(new JSONSerializer(out), Collections.singletonMap("A\nB", 1), null, null, 0); Assert.assertEquals("{\"A\\nB\":1}", out.toString()); @@ -106,7 +106,7 @@ public void test_special2_s() throws Exception { public void test_special3_s() throws Exception { SerializeWriter out = new SerializeWriter(); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); mapSerializer.write(new JSONSerializer(out), Collections.singletonMap("A\nB", Collections.EMPTY_MAP), null, null, 0); Assert.assertEquals("{\"A\\nB\":{}}", out.toString()); @@ -118,7 +118,7 @@ public void test_4() throws Exception { map.put("TOP", "value"); map.put("bytes", new byte[] { 1, 2 }); - MapCodec mapSerializer = new MapCodec(); + MapSerializer mapSerializer = new MapSerializer(); mapSerializer.write(new JSONSerializer(out), map, null, null, 0); String text = out.toString();