code: protected GenericConverter getConverter(TypeDescriptor sourceType, TypeDescriptor targetType) {
  		ConverterCacheKey key = new ConverterCacheKey(sourceType, targetType);
  		GenericConverter converter = this.converterCache.get(key);
  		if (converter != null) {
  			return (converter != NO_MATCH ? converter : null);
  		}
  
  		converter = this.converters.find(sourceType, targetType);
  		if (converter == null) {
  			converter = getDefaultConverter(sourceType, targetType);
  		}
  
  		if (converter != null) {
  			this.converterCache.put(key, converter);
  			return converter;
  		}
  
  		this.converterCache.put(key, NO_MATCH);
  		return null;
  	}
docs: Hook method to lookup the converter for a given sourceType/targetType pair.
  First queries this ConversionService's converter cache.
  On a cache miss, then performs an exhaustive search for a matching converter.
  If no converter matches, returns the default converter.
  Subclasses may override.
  @param sourceType the source type to convert from
  @param targetType the target type to convert to
  @return the generic converter that will perform the conversion, or {@code null} if
  no suitable converter was found
  @see #getDefaultConverter(TypeDescriptor, TypeDescriptor)