code: public <E> E deserialize(final String str, final Class<E> type, final Collection<Converter<?>> converters) {
          logger.debug("deserialize(\"{}\", {})", str, type);
  
          if (converters == null || converters.isEmpty()) {
              // when possible, just reuse the base converter
              @SuppressWarnings("unchecked") final E result = (E) _baseConverter.fromString(type, str);
              return result;
          }
  
          final DelegatingConverter delegatingConverter = new DelegatingConverter();
  
          if (converters != null) {
              for (final Converter<?> converter : converters) {
                  delegatingConverter.addConverter(converter);
                  delegatingConverter.initialize(converter, _injectionManager);
              }
          }
  
          final List<Converter<?>> baseconverters = _baseConverter.getConverters();
          for (final Converter<?> converter : baseconverters) {
              delegatingConverter.addConverter(converter);
          }
  
          @SuppressWarnings("unchecked") final E result = (E) delegatingConverter.fromString(type, str);
          return result;
      }
docs: Deserializes a String into a Java object of the particular type.
  
  @param str
  the serialized string representation
  @param type
  the requested type
  @param converters
  an optional collection of custom converters to apply when
  deserializing
  @return a Java object matching the String representation