@Test public void testGetPropertiesWithExceptions () { Map<String, BeanProperty> properties = ClassUtil.getProperties(C.class); C c = new C(); BeanProperty prop = properties.get("methodReadOnly"); assertNull(prop.getSetter()); assertTrue(prop.isImmutable(true)); assertEquals("readonly", prop.get(c)); try { prop.set(c, "str"); } catch(InvokeRuntimeException e) { assertEquals("field is not mutable: methodReadOnly,class:class com.jsonex.core.util.ClassUtilTest$C", e.getMessage()); } prop = properties.get("methodSetOnly"); assertNull(prop.getGetter()); assertFalse(prop.isReadable(true)); prop.set(c, "str"); try { prop.get(c); } catch(InvokeRuntimeException e) { assertEquals("field is not readable: methodSetOnly,class:class com.jsonex.core.util.ClassUtilTest$C", e.getMessage()); } try { prop.set(c, null); } catch(InvokeRuntimeException e) { assertEquals("error set value:methodSetOnly,class=class com.jsonex.core.util.ClassUtilTest$C,value=null", e.getMessage()); } }
public static Map<String, BeanProperty> getProperties(Class<?> cls) { Map<String, BeanProperty> result = beanPropertyCache.get(cls); if (result == null) { synchronized(beanPropertyCache) { result = _getProperties(cls); beanPropertyCache.put(cls, result); } } return result; }
ClassUtil { public static Map<String, BeanProperty> getProperties(Class<?> cls) { Map<String, BeanProperty> result = beanPropertyCache.get(cls); if (result == null) { synchronized(beanPropertyCache) { result = _getProperties(cls); beanPropertyCache.put(cls, result); } } return result; } }
ClassUtil { public static Map<String, BeanProperty> getProperties(Class<?> cls) { Map<String, BeanProperty> result = beanPropertyCache.get(cls); if (result == null) { synchronized(beanPropertyCache) { result = _getProperties(cls); beanPropertyCache.put(cls, result); } } return result; }  }
ClassUtil { public static Map<String, BeanProperty> getProperties(Class<?> cls) { Map<String, BeanProperty> result = beanPropertyCache.get(cls); if (result == null) { synchronized(beanPropertyCache) { result = _getProperties(cls); beanPropertyCache.put(cls, result); } } return result; }  @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setStaticPrivateField(String className, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code static void setPrivateField(Object obj, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setPrivateField(Class<?> cls, Object obj, String fieldName, Object value); static Field getDeclaredField(Class<?> cls, String name); static Map<String, BeanProperty> getProperties(Class<?> cls); static Object getObjectByPath(String path); static Object getObjectByPath(Class<?> cls, Object obj, List<String> relativePath); static Object getObjectProperty(Class<?> cls, Object obj, String propertyName); static Class<?> getGenericClass(Type type); static Type[] getGenericTypeActualParams(Type type); static Type[] getGenericTypeActualParamsForInterface(Type type, Class<?> intf); static List<Class<?>> getAllInterface(Class<?> cls); static Class<?> findInterface(Class<?> cls, Class<?> itf); static Field[] getAllFields(Class<?> cls); static Method[] getAllMethods(Class<?> cls); static T stringToEnum(Class<T> cls, String str); @SuppressWarnings({ "unchecked", "rawtypes" }) static T stringToSimpleObject(String str, Class<T> cls, BeanConvertContext ctx); static boolean isSimpleType(Class<?> cls); static Object objectToSimpleType(Object obj, Class<?> cls); static Type getType(String typeName); static StackTraceElement findCallerStackTrace(Class<?> calleeClass); }
ClassUtil { public static Map<String, BeanProperty> getProperties(Class<?> cls) { Map<String, BeanProperty> result = beanPropertyCache.get(cls); if (result == null) { synchronized(beanPropertyCache) { result = _getProperties(cls); beanPropertyCache.put(cls, result); } } return result; }  @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setStaticPrivateField(String className, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code static void setPrivateField(Object obj, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setPrivateField(Class<?> cls, Object obj, String fieldName, Object value); static Field getDeclaredField(Class<?> cls, String name); static Map<String, BeanProperty> getProperties(Class<?> cls); static Object getObjectByPath(String path); static Object getObjectByPath(Class<?> cls, Object obj, List<String> relativePath); static Object getObjectProperty(Class<?> cls, Object obj, String propertyName); static Class<?> getGenericClass(Type type); static Type[] getGenericTypeActualParams(Type type); static Type[] getGenericTypeActualParamsForInterface(Type type, Class<?> intf); static List<Class<?>> getAllInterface(Class<?> cls); static Class<?> findInterface(Class<?> cls, Class<?> itf); static Field[] getAllFields(Class<?> cls); static Method[] getAllMethods(Class<?> cls); static T stringToEnum(Class<T> cls, String str); @SuppressWarnings({ "unchecked", "rawtypes" }) static T stringToSimpleObject(String str, Class<T> cls, BeanConvertContext ctx); static boolean isSimpleType(Class<?> cls); static Object objectToSimpleType(Object obj, Class<?> cls); static Type getType(String typeName); static StackTraceElement findCallerStackTrace(Class<?> calleeClass); static final Type[] EMPTY_TYPE_ARRAY; static final Map<String, Class<?>> PRIMITIVE_TYPE_MAP; }