code: protected final void warnOrThrow(final S source,
                                       final String message,
                                       final Throwable cause,
                                       final ConversionStringency stringency,
                                       final Logger logger) throws ConversionException {
  
          checkNotNull(stringency, logger);
          if (stringency.isLenient()) {
              if (cause != null) {
                  logger.warn(String.format("could not convert %s to %s, %s", sourceClass.toString(), targetClass.toString(), message), cause);
              }
              else {
                  logger.warn("could not convert {} to {}, {}", sourceClass.toString(), targetClass.toString(), message);
              }
          }
          else if (stringency.isStrict()) {
              throw new ConversionException(String.format("could not convert %s to %s, %s", sourceClass.toString(), targetClass.toString(), message), cause, source, sourceClass, targetClass);
          }
      }
docs: If the conversion stringency is lenient, log a warning with the specified message,
  or if the conversion stringency is strict, throw a ConversionException with the specified
  message and cause.
  
  @param source source
  @param message message
  @param cause cause
  @param stringency conversion stringency, must not be null
  @param logger logger, must not be null
  @throws ConversionException if the specified conversion stringency is strict
  @throws NullPointerException if either conversion stringency or logger are null