Java 类com.fasterxml.jackson.databind.deser.DeserializerCache 实例源码

项目:rapidoid    文件:JSON.java   
public static synchronized void reset() {
    for (ObjectMapper mapper : U.list(MAPPER, PRETTY_MAPPER)) {

        SerializerProvider serializerProvider = mapper.getSerializerProvider();

        if (serializerProvider instanceof DefaultSerializerProvider) {
            DefaultSerializerProvider provider = (DefaultSerializerProvider) serializerProvider;
            provider.flushCachedSerializers();
        } else {
            Log.warn("Couldn't clear the cache of Jackson serializers!", "class", Cls.of(serializerProvider));
        }

        DeserializationContext deserializationContext = mapper.getDeserializationContext();
        Object cache = Cls.getFieldValue(deserializationContext, "_cache");

        if (cache instanceof DeserializerCache) {
            DeserializerCache deserializerCache = (DeserializerCache) cache;
            deserializerCache.flushCachedDeserializers();
        } else {
            Log.warn("Couldn't clear the cache of Jackson deserializers!", "class", Cls.of(cache));
        }
    }
}
项目:cevent-app    文件:JacksonReloader.java   
private void invalidateJacksonCaches() {
    try {
        ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
        Collection<ObjectMapper> mappers = BeanFactoryUtils
                .beansOfTypeIncludingAncestors(beanFactory, ObjectMapper.class)
                .values();

        for (ObjectMapper mapper : mappers) {
            log.trace("Flushing Jackson serializer cache");
            SerializerProvider serializerProvider = mapper.getSerializerProvider();
            Field serializerCacheField = serializerProvider.getClass().getSuperclass().getSuperclass().getDeclaredField("_serializerCache");
            ReflectionUtils.makeAccessible(serializerCacheField);
            SerializerCache serializerCache = (SerializerCache) serializerCacheField.get(serializerProvider);
            Method serializerCacheFlushMethod = SerializerCache.class.getDeclaredMethod("flush");
            serializerCacheFlushMethod.invoke(serializerCache);

            log.trace("Flushing Jackson deserializer cache");
            DeserializationContext deserializationContext = mapper.getDeserializationContext();
            Field deSerializerCacheField = deserializationContext.getClass().getSuperclass().getSuperclass().getDeclaredField("_cache");
            ReflectionUtils.makeAccessible(deSerializerCacheField);
            DeserializerCache deSerializerCache = (DeserializerCache) deSerializerCacheField.get(deserializationContext);
            Method deSerializerCacheFlushMethod = DeserializerCache.class.getDeclaredMethod("flushCachedDeserializers");
            deSerializerCacheFlushMethod.invoke(deSerializerCache);
        }
    } catch (Exception e) {
        log.warn("Could not hot reload Jackson class!");
        e.printStackTrace();
    }
}
项目:parkingfriends    文件:JacksonReloader.java   
public void reloadEvent() {
    log.debug("Hot reloading Jackson classes");
    try {
        ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
        Collection<ObjectMapper> mappers = BeanFactoryUtils
                .beansOfTypeIncludingAncestors(beanFactory, ObjectMapper.class)
                .values();

        for (ObjectMapper mapper : mappers) {
            log.trace("Flushing Jackson serializer cache");
            SerializerProvider serializerProvider = mapper.getSerializerProvider();
            Field serializerCacheField = serializerProvider.getClass().getSuperclass().getSuperclass().getDeclaredField("_serializerCache");
            ReflectionUtils.makeAccessible(serializerCacheField);
            SerializerCache serializerCache = (SerializerCache) serializerCacheField.get(serializerProvider);
            Method serializerCacheFlushMethod = SerializerCache.class.getDeclaredMethod("flush");
            serializerCacheFlushMethod.invoke(serializerCache);

            log.trace("Flushing Jackson deserializer cache");
            DeserializationContext deserializationContext = mapper.getDeserializationContext();
            Field deSerializerCacheField = deserializationContext.getClass().getSuperclass().getSuperclass().getDeclaredField("_cache");
            ReflectionUtils.makeAccessible(deSerializerCacheField);
            DeserializerCache deSerializerCache = (DeserializerCache) deSerializerCacheField.get(deserializationContext);
            Method deSerializerCacheFlushMethod = DeserializerCache.class.getDeclaredMethod("flushCachedDeserializers");
            deSerializerCacheFlushMethod.invoke(deSerializerCache);
        }
    } catch (Exception e) {
        log.warn("Could not hot reload Jackson class!");
        e.printStackTrace();
    }
}