@SuppressWarnings("unchecked") public static <T> T getFieldValue(Object instance, String fieldName, T defaultValue) { try { return (T) getFieldValue(instance, fieldName); } catch (Exception e) { return defaultValue; } }
public static Object getFieldValue(Object instance, String fieldName) { try { for (Class<?> c = instance.getClass(); c.getSuperclass() != null; c = c.getSuperclass()) { try { Field field = c.getDeclaredField(fieldName); return getFieldValue(field, instance); } catch (NoSuchFieldException e) { // keep searching the filed in the super-class... } } } catch (Exception e) { throw U.rte("Cannot get field value!", e); } throw U.rte("Cannot find the field '%s' in the class '%s'", fieldName, instance.getClass()); }
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)); } } }