private void initHandlers(Class<?> mxbeanInterface) {
    Method[] methodArray = mxbeanInterface.getMethods();
    List<Method> methods = eliminateCovariantMethods(methodArray);

    for (Method method : methods) {
      String name = method.getName();

      String attributeName = "";
      if (name.startsWith("get")) {
        attributeName = name.substring(3);
      } else if (name.startsWith("is") && method.getReturnType() == boolean.class) {
        attributeName = name.substring(2);
      }

      if (!attributeName.isEmpty() && method.getParameterTypes().length == 0
          && method.getReturnType() != void.class) {
        // For Getters
        methodHandlerMap.put(method, new GetterHandler(attributeName, OpenMethod.from(method)));
      } else if (name.startsWith("set") && name.length() > 3
          && method.getParameterTypes().length == 1 && method.getReturnType() == void.class) {
        // For Setters
        methodHandlerMap.put(method, new SetterHandler(attributeName, OpenMethod.from(method)));
      } else {
        methodHandlerMap.put(method, new OpHandler(attributeName, OpenMethod.from(method)));
      }
    }
  }
This proxy handler handles all the method call invoked on an MXBean It follows same route as
MBeanProxyInvocationHandler Only difference is after obtaining the result it transforms the open
type to the actual java type
geode-core/src/main/java/org/apache/geode/management/internal/MXBeanProxyInvocationHandler.java