docs: private static Optional<String> getMemberName(ConstraintViolation<?> violation, Invocable invocable) {
          final List<Path.Node> propertyPath = Lists.of(violation.getPropertyPath());
          final int size = propertyPath.size();
          if (size < 2) {
              return Optional.empty();
          }
  
          final Path.Node parent = propertyPath.get(size - 2);
          final Path.Node member = propertyPath.get(size - 1);
          switch (parent.getKind()) {
              case PARAMETER:
                  // Constraint violation most likely failed with a BeanParam
                  final List<Parameter> parameters = invocable.getParameters();
                  final Parameter param = parameters.get(parent.as(Path.ParameterNode.class).getParameterIndex());
  
                  // Extract the failing *Param annotation inside the Bean Param
                  if (param.getSource().equals(Parameter.Source.BEAN_PARAM)) {
                      final Field field = FieldUtils.getField(param.getRawType(), member.getName(), true);
                      return JerseyParameterNameProvider.getParameterNameFromAnnotations(field.getDeclaredAnnotations());
                  }
                  break;
              case METHOD:
                  return Optional.of(member.getName());
              default:
                  break;
          }
          return Optional.empty();
      }