Last active
August 29, 2015 14:02
-
-
Save komamitsu/92ddc8f9e1f52af11158 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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