@Override
 public <T> T getProperty(E bean, String name, Class<T> clazz) {
   String methodName =
       (!clazz.equals(Boolean.class))
           ? JavaBeanNamingUtils.getGetMethod(name)
           : JavaBeanNamingUtils.getIsMethod(name);
   Method method = getMethods.get(methodName);
   if (method != null)
     try {
       return clazz.cast(method.invoke(bean));
     } catch (IllegalArgumentException e) {
       throw new JavaBeanOperateException(
           JavaBeanOperateException.JAVA_BEAN_GETTER_HAS_PARAMETERS + name, e);
     } catch (IllegalAccessException e) {
       throw new JavaBeanOperateException(
           JavaBeanOperateException.JAVA_BEAN_METHODS_NOT_PUBLIC + name, e);
     } catch (InvocationTargetException e) {
       throw new JavaBeanOperateException(e);
     } catch (ClassCastException ex) {
       throw new JavaBeanOperateException(
           "The return value of the java bean is not the class : " + clazz, ex);
     }
   else
     throw new JavaBeanOperateException(JavaBeanOperateException.JAVA_BEAN_NO_SUCH_GETTER + name);
 }
 @Override
 public void setProperty(E bean, String name, Object value) {
   String methodName = JavaBeanNamingUtils.getSetMethod(name);
   Method method = setMethods.get(methodName);
   if (method != null)
     try {
       method.invoke(bean, value);
     } catch (IllegalArgumentException e) {
       throw new JavaBeanOperateException(
           JavaBeanOperateException.JAVA_BEAN_SETTER_HAS_ILLEGAL_PARAMETERS + name, e);
     } catch (IllegalAccessException e) {
       throw new JavaBeanOperateException(
           JavaBeanOperateException.JAVA_BEAN_METHODS_NOT_PUBLIC + name, e);
     } catch (InvocationTargetException e) {
       throw new JavaBeanOperateException(e);
     }
   else
     throw new JavaBeanOperateException(JavaBeanOperateException.JAVA_BEAN_NO_SUCH_SETTER + name);
 }
 private void handleMethod(Method method) {
   String methodName = method.getName();
   if (JavaBeanNamingUtils.isGetter(methodName)) getMethods.put(methodName, method);
   else if (JavaBeanNamingUtils.isSetter(methodName)) setMethods.put(methodName, method);
 }