docs: public static <In, Out> In populateInputParameter(
              final Processor<In, Out> processor,
              @Nonnull final Values values) {
          In inputObject = processor.createInputParameter();
          if (inputObject != null) {
              Collection<Field> fields = getAllAttributes(inputObject.getClass());
              for (Field field: fields) {
                  String name = getInputValueName(processor.getOutputPrefix(),
                                                  processor.getInputMapperBiMap(), field.getName());
                  Object value = values.getObject(name, Object.class);
                  if (value != null) {
                      try {
                          field.set(inputObject, value);
                      } catch (IllegalAccessException e) {
                          throw ExceptionUtils.getRuntimeException(e);
                      }
                  } else {
                      if (field.getAnnotation(HasDefaultValue.class) == null) {
                          throw new NoSuchElementException(name + " is a required property for " + processor
                                                                   +
                                                                   " and therefore must be defined in the " +
                                                                   "Request Data or be an output of " +
                                                                   "one of the other processors. Available " +
                                                                   "values: " +
                                                                   values.asMap().keySet() + ".");
                      }
                  }
              }
          }
          return inputObject;
      }