code: private MBeanAttributeInfo[] getAttributeInfo() {
          final List<MBeanAttributeInfo> infoList = new ArrayList<>();
  
          if (type != null) {
              final List<String> attributes = new ArrayList<>();
  
              if (type.isInterface()) {
                  ReflectionUtils.doWithMethods(type, new ReflectionUtils.MethodCallback() {
                      @Override
                      public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
                          String attributeName;
  
                          if (method.getName().startsWith("get")) {
                              attributeName = method.getName().substring(3);
                          } else if (method.getName().startsWith("is")) {
                              attributeName = method.getName().substring(2);
                          } else {
                              attributeName = method.getName();
                          }
  
                          if (!attributes.contains(attributeName)) {
                              infoList.add(new MBeanAttributeInfo(attributeName, method.getReturnType().getName(), ATTRIBUTE_DESCRIPTION, true, true, method.getName().startsWith("is")));
                              attributes.add(attributeName);
                          }
                      }
                  }, new ReflectionUtils.MethodFilter() {
                      @Override
                      public boolean matches(Method method) {
                          return method.getDeclaringClass().equals(type) && (method.getName().startsWith("get") || method.getName().startsWith("is"));
                      }
                  });
              } else {
                  ReflectionUtils.doWithFields(type, new ReflectionUtils.FieldCallback() {
                      @Override
                      public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
                          infoList.add(new MBeanAttributeInfo(field.getName(), field.getType().getName(), ATTRIBUTE_DESCRIPTION, true, true, field.getType().equals(Boolean.class)));
                      }
                  }, new ReflectionUtils.FieldFilter() {
                      @Override
                      public boolean matches(Field field) {
                          return !Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers());
                      }
                  });
              }
          } else {
              int i = 1;
              for (ManagedBeanInvocation.Attribute attribute : attributes) {
                  infoList.add(new MBeanAttributeInfo(attribute.getName(), attribute.getType(), ATTRIBUTE_DESCRIPTION, true, true, attribute.getType().equals(Boolean.class.getName())));
              }
          }
  
          return infoList.toArray(new MBeanAttributeInfo[infoList.size()]);
      }
docs: Create this managed bean attributes info.
  @return