Skip to content

Instantly share code, notes, and snippets.

@komamitsu
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save komamitsu/92ddc8f9e1f52af11158 to your computer and use it in GitHub Desktop.
Save komamitsu/92ddc8f9e1f52af11158 to your computer and use it in GitHub Desktop.
Map<String, Object> map = new HashMap<>();
map.put("name", "komamitsu");
map.put("age", 39);
ObjectMapper objectMapper = new ObjectMapper();
String serialized = objectMapper.writeValueAsString(map);
System.out.println(serialized);
Map<String, Object> deserialized =
objectMapper.readValue(serialized, new TypeReference<Map<String, Object>>() { });
System.out.println(deserialized);
String serialized = objectMapper.writeValueAsString(map);
com.fasterxml.jackson.core.JsonFactory#createGenerator(java.io.Writer)
com.fasterxml.jackson.databind.ObjectMapper#_configAndWriteValue(com.fasterxml.jackson.core.JsonGenerator, java.lang.Object)
_configAndWriteValue(_jsonFactory.createGenerator(sw), value);
_serializerProvider(cfg).serializeValue(jgen, value);
final JsonSerializer<Object> ser = findTypedValueSerializer(cls, true, null);
com.fasterxml.jackson.databind.SerializerProvider#findValueSerializer(java.lang.Class<?>, com.fasterxml.jackson.databind.BeanProperty)
com.fasterxml.jackson.databind.SerializerProvider#_createAndCacheUntypedSerializer(java.lang.Class<?>)
com.fasterxml.jackson.databind.cfg.MapperConfig#constructType(java.lang.Class<?>)
return getTypeFactory().constructType(cls, (TypeBindings) null);
com.fasterxml.jackson.databind.type.TypeFactory#_constructType
type=class java.util.HashMap
// simple class?
if (type instanceof Class<?>) {
Class<?> cls = (Class<?>) type;
resultType = _fromClass(cls, context);
com.fasterxml.jackson.databind.type.TypeFactory#_fromClass
public ClassKey(Class<?> clz)
{
_class = clz;
_className = clz.getName();
_hashCode = _className.hashCode();
}
TypeSerializer typeSer = _serializerFactory.createTypeSerializer(_config, _config.constructType(valueType));
com.fasterxml.jackson.databind.ser.BasicSerializerFactory#createTypeSerializer
baseType=[map type; class java.util.HashMap, [simple type, class java.lang.Object] -> [simple type, class java.lang.Object]]
com.fasterxml.jackson.databind.introspect.BasicClassIntrospector#forClassAnnotations
AnnotatedClass ac = bean.getClassInfo();
AnnotationIntrospector ai = config.getAnnotationIntrospector();
TypeResolverBuilder<?> b = ai.findTypeResolver(config, ac, baseType);
ac=[AnnotedClass java.util.HashMap]
ai=com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector@5f9c449f
com.fasterxml.jackson.databind.introspect.AnnotatedClass#resolveClassAnnotations
for (Class<?> cls : _superTypes) {
// and mix mix-in annotations in-between
_addClassMixIns(_classAnnotations, cls);
_addAnnotationsIfNotPresent(_classAnnotations, cls.getDeclaredAnnotations());
}
_superTypes = {java.util.ArrayList@1540} size = 4
[0] = {java.lang.Class@77}"interface java.util.Map"
[1] = {java.lang.Class@307}"interface java.lang.Cloneable"
[2] = {java.lang.Class@327}"interface java.io.Serializable"
[3] = {java.lang.Class@322}"class java.util.AbstractMap"
ser=com.fasterxml.jackson.databind.ser.std.MapSerializer@4dfe96f2
public void serialize(Map<?,?> value, JsonGenerator jgen, SerializerProvider provider)
com.fasterxml.jackson.core.json.WriterBasedJsonGenerator@449b9ad
com.fasterxml.jackson.databind.ser.DefaultSerializerProvider$Impl@49271218
com.fasterxml.jackson.databind.ser.std.MapSerializer#serializeFields
keySerializer=com.fasterxml.jackson.databind.ser.std.StdKeySerializer@40c444cf
com.fasterxml.jackson.databind.ser.std.StdKeySerializer#serialize
com.fasterxml.jackson.core.json.WriterBasedJsonGenerator#writeFieldName(java.lang.String)
com.fasterxml.jackson.core.json.JsonWriteContext#writeFieldName
public final int writeFieldName(String name) throws JsonProcessingException
{
_gotName = true;
_currentName = name;
if (_dups != null) {
_checkDup(_dups, name);
}
return (_index < 0) ? STATUS_OK_AS_IS : STATUS_OK_AFTER_COMMA;
}
com.fasterxml.jackson.core.json.WriterBasedJsonGenerator#_writeFieldName(java.lang.String, boolean)
com.fasterxml.jackson.core.json.WriterBasedJsonGenerator#_writeString(java.lang.String)
com.fasterxml.jackson.databind.ser.std.MapSerializer#_findAndAddDynamic(com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap, java.lang.Class<?>, com.fasterxml.jackson.databind.SerializerProvider)
com.fasterxml.jackson.databind.ser.std.NumberSerializers.IntegerSerializer#serialize
com.fasterxml.jackson.core.json.WriterBasedJsonGenerator#writeNumber(int)
com.fasterxml.jackson.core.io.NumberOutput#outputInt(int, char[], int)
com.fasterxml.jackson.core.json.WriterBasedJsonGenerator#close
Map<String, Object> map = new HashMap<>();
map.put("name", "komamitsu");
map.put("age", 39);
SmileFactory factory = new SmileFactory();
ObjectMapper objectMapper = new ObjectMapper(factory);
byte[] serialized = objectMapper.writeValueAsBytes(map);
Map<String, Object> deserialized =
objectMapper.readValue(serialized, new TypeReference<Map<String, Object>>() { });
System.out.println(deserialized);
com.fasterxml.jackson.databind.ObjectMapper#writeValueAsBytes
com.fasterxml.jackson.dataformat.smile.SmileFactory#createGenerator(java.io.OutputStream, com.fasterxml.jackson.core.JsonEncoding)
com.fasterxml.jackson.dataformat.smile.SmileFactory#_createGenerator(java.io.OutputStream, com.fasterxml.jackson.core.io.IOContext)
SmileGenerator gen = new SmileGenerator(ctxt, _generatorFeatures, feats, _objectCodec, out);
com.fasterxml.jackson.databind.ObjectMapper#_configAndWriteValue(com.fasterxml.jackson.core.JsonGenerator, java.lang.Object)
com.fasterxml.jackson.databind.ser.DefaultSerializerProvider#serializeValue(com.fasterxml.jackson.core.JsonGenerator, java.lang.Object)
com.fasterxml.jackson.databind.SerializerProvider#findTypedValueSerializer(java.lang.Class<?>, boolean, com.fasterxml.jackson.databind.BeanProperty)
com.fasterxml.jackson.databind.SerializerProvider#findValueSerializer(java.lang.Class<?>, com.fasterxml.jackson.databind.BeanProperty)
com.fasterxml.jackson.databind.SerializerProvider#_createAndCacheUntypedSerializer(java.lang.Class<?>)
com.fasterxml.jackson.databind.ser.std.MapSerializer#serialize
com.fasterxml.jackson.dataformat.smile.SmileGenerator#writeStartObject
@Override
public final void writeStartObject() throws IOException, JsonGenerationException
{
_verifyValueWrite("start an object");
_writeContext = _writeContext.createChildObjectContext();
_writeByte(TOKEN_LITERAL_START_OBJECT);
}
com.fasterxml.jackson.databind.ser.std.MapSerializer#serializeFields
com.fasterxml.jackson.databind.ser.std.StdKeySerializer#serialize
com.fasterxml.jackson.dataformat.smile.SmileGenerator#writeFieldName(java.lang.String)
com.fasterxml.jackson.core.json.JsonWriteContext#writeFieldName
com.fasterxml.jackson.dataformat.smile.SmileGenerator#_writeFieldName(java.lang.String)
int len = name.length();
name.getChars(0, len, _charBuffer, 0);
com.fasterxml.jackson.databind.ser.std.MapSerializer#_findAndAddDynamic(com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap, java.lang.Class<?>, com.fasterxml.jackson.databind.SerializerProvider)
com.fasterxml.jackson.databind.ser.std.NumberSerializers.IntegerSerializer#serialize
com.fasterxml.jackson.dataformat.smile.SmileGenerator#writeNumber(int)
com.fasterxml.jackson.databind.ser.std.StringSerializer#serialize
com.fasterxml.jackson.dataformat.smile.SmileGenerator#writeString(java.lang.String)
com.fasterxml.jackson.dataformat.smile.SmileGenerator#close
com.fasterxml.jackson.databind.ObjectMapper#readValue(byte[], com.fasterxml.jackson.core.type.TypeReference)
com.fasterxml.jackson.dataformat.smile.SmileFactory#createParser(byte[])
com.fasterxml.jackson.core.JsonFactory#_createContext
com.fasterxml.jackson.dataformat.smile.SmileFactory#_createParser(byte[], int, int, com.fasterxml.jackson.core.io.IOContext)
com.fasterxml.jackson.databind.ObjectMapper#_readMapAndClose
com.fasterxml.jackson.databind.ObjectMapper#_initForReading
com.fasterxml.jackson.core.base.ParserMinimalBase#getCurrentToken
com.fasterxml.jackson.dataformat.smile.SmileParser#nextToken
int ch = _inputBuffer[_inputPtr++];
case 0x1A: // START_OBJECT
_parsingContext = _parsingContext.createChildObjectContext(-1, -1);
return (_currToken = JsonToken.START_OBJECT);
com.fasterxml.jackson.core.json.JsonReadContext#createChildObjectContext
com.fasterxml.jackson.databind.deser.std.MapDeserializer#deserialize(com.fasterxml.jackson.core.JsonParser, com.fasterxml.jackson.databind.DeserializationContext)
com.fasterxml.jackson.core.base.ParserMinimalBase#getCurrentToken
com.fasterxml.jackson.databind.deser.std.MapDeserializer#_readAndBindStringMap
com.fasterxml.jackson.core.base.ParserMinimalBase#getCurrentToken
com.fasterxml.jackson.dataformat.smile.SmileParser#nextToken
com.fasterxml.jackson.core.base.ParserBase#getCurrentName
com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer#deserialize
com.fasterxml.jackson.core.base.ParserBase#getNumberValue
com.fasterxml.jackson.dataformat.smile.SmileParser#_parseNumericValue
```
# When did it call _parsingContext.setCurrentName(name)???
com.fasterxml.jackson.dataformat.smile.SmileParser#_handleFieldName
case 2: // short ASCII
{
int len = 1 + (ch & 0x3f);
String name;
Name n = _findDecodedFromSymbols(len);
if (n != null) {
name = n.getName();
_inputPtr += len;
} else {
name = _decodeShortAsciiName(len);
name = _addDecodedToSymbols(len, name);
}
if (_seenNames != null) {
if (_seenNameCount >= _seenNames.length) {
_seenNames = _expandSeenNames(_seenNames);
}
_seenNames[_seenNameCount++] = name;
}
_parsingContext.setCurrentName(name);
}
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment