public SerializerProvider() { this._config = null; this._serializerFactory = null; this._serializerCache = new SerializerCache(); this._knownSerializers = null; this._rootNames = new RootNameLookup(); this._serializationView = null; }
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(); } }
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(); } }