@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);
 }