code: public <T> TypedStringConverter<T> findTypedConverter(final Class<T> cls) {
          TypedStringConverter<T> conv = findConverterQuiet(cls);
          if (conv == null) {
              throw new IllegalStateException("No registered converter found: " + cls);
          }
          return conv;
      }
docs: Finds a suitable converter for the type.
  <p>
  This returns an instance of {@code TypedStringConverter} for the specified class.
  This is designed for user code where the {@code Class} object generics is known.
  <p>
  The search algorithm first searches the registered converters.
  It then searches for {@code ToString} and {@code FromString} annotations on the
  specified class, class hierarchy or immediate parent interfaces.
  Finally, it handles {@code Enum} instances.
  <p>
  The returned converter may be queried for the effective type of the conversion.
  This can be used to find the best type to send in a serialized form.
  <p>
  NOTE: Changing the method return type of {@link #findConverter(Class)}
  would be source compatible but not binary compatible. As this is a low-level
  library, binary compatibility is important, hence the addition of this method.
  
  @param <T>  the type of the converter
  @param cls  the class to find a converter for, not null
  @return the converter, not null
  @throws RuntimeException (or subclass) if no converter found
  @since 1.7