docs: public static <F extends ConfigurationComponent<F>> void defaultValidate(final F component, final String section) throws ConfigException {
          try {
              final Class<?> type = component.getClass();
              final BeanInfo beanInfo = Introspector.getBeanInfo(type);
              for (final PropertyDescriptor propertyDescriptor : beanInfo.getPropertyDescriptors()) {
                  if (ConfigurationComponent.class.isAssignableFrom(propertyDescriptor.getPropertyType())) {
                      @SuppressWarnings("rawtypes")
                      final ConfigurationComponent subComponent = (ConfigurationComponent) propertyDescriptor.getReadMethod().invoke(component);
                      basicValidate(subComponent, section);
                  }
              }
          } catch (final IntrospectionException | IllegalAccessException | InvocationTargetException e) {
              throw new ConfigException("Error performing config bean introspection", e);
          }
      }