package com.mossle.core.util; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * reflect utils. * * @author Lingo */ public class ReflectUtils { /** logger. */ private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); /** protected constructor. */ protected ReflectUtils() { } public static String getGetterMethodName(Object target, String fieldName) throws NoSuchMethodException { String methodName = "get" + StringUtils.capitalize(fieldName); try { target.getClass().getDeclaredMethod(methodName); } catch (NoSuchMethodException ex) { logger.trace(ex.getMessage(), ex); methodName = "is" + StringUtils.capitalize(fieldName); target.getClass().getDeclaredMethod(methodName); } return methodName; } public static String getSetterMethodName(String fieldName) { return "set" + StringUtils.capitalize(fieldName); } /** * get method value by name. * * @param target * Object * @param methodName * method name * @return object * @throws Exception * ex */ public static Object getMethodValue(Object target, String methodName) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { Method method = target.getClass().getDeclaredMethod(methodName); return method.invoke(target); } /** * set method value by name. * * @param target * Object * @param methodName * method name * @param methodValue * method value * @throws Exception * ex */ public static void setMethodValue(Object target, String methodName, Object methodValue) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { Method method = target.getClass().getDeclaredMethod(methodName, methodValue.getClass()); method.invoke(target, methodValue); } public static Object getFieldValue(Object target, String fieldName) throws NoSuchFieldException, IllegalAccessException { return getFieldValue(target, fieldName, true); } public static Object getFieldValue(Object target, String fieldName, boolean isForce) throws NoSuchFieldException, IllegalAccessException { Field field = target.getClass().getDeclaredField(fieldName); field.setAccessible(isForce); return field.get(target); } /** * convert reflection exception to unchecked. * * @param e * Exception * @return RuntimeException; */ public static RuntimeException convertReflectionExceptionToUnchecked( Exception e) { if (e instanceof RuntimeException) { return (RuntimeException) e; } else if (e instanceof IllegalAccessException || e instanceof NoSuchMethodException || e instanceof NoSuchFieldException) { return new IllegalArgumentException("Reflection Exception.", e); } else if (e instanceof InvocationTargetException) { Throwable targetException = ((InvocationTargetException) e) .getTargetException(); if (targetException instanceof RuntimeException) { return (RuntimeException) targetException; } else { return new RuntimeException("Reflection Exception.", targetException); } } return new RuntimeException("Unexpected Checked Exception.", e); } public static Class<?> getOriginalClass(Class<?> clz) { Class<?> superclass = clz; while (superclass.getName().indexOf("_$$_jvst") != -1) { superclass = superclass.getSuperclass(); if (superclass == null) { return superclass; } } return superclass; } }