docs: @Override
      public void validateParameter(String parameterName, ModelNode value) throws OperationFailedException {
          RuntimeException cause = null;
          if (!value.isDefined()) {
              if (!nullable) {
                  throw ControllerLogger.ROOT_LOGGER.nullNotAllowed(parameterName);
              }
          } else  {
              boolean matched = false;
              if (strictType) {
                  matched = validTypes.contains(value.getType());
              } else {
                  for (ModelType validType : validTypes) {
                      try {
                          if (matches(value, validType)) {
                              matched = true;
                              break;
                          }
                      } catch (RuntimeException e) {
                          cause = e;
                      }
                  }
              }
              if (!matched) {
                  if (cause == null) {
                      throw ControllerLogger.ROOT_LOGGER.incorrectType(parameterName, validTypes, value.getType());
                  }
                  String message = String.format("%s. %s",
                          ControllerLogger.ROOT_LOGGER.incorrectType(parameterName, validTypes, value.getType()).getLocalizedMessage(),
                          ControllerLogger.ROOT_LOGGER.typeConversionError(value, validTypes));
                  throw new OperationFailedException(message, cause);
              }
          }
      }