code: public final <E> E deserialize(String str, Class<E> type, Collection<Class<? extends Converter<?>>> converterClasses) {
          logger.debug("deserialize(\"{}\", {})", str, type);
  
          final DelegatingConverter delegatingConverter = new DelegatingConverter();
  
          if (converterClasses != null) {
              for (Class<? extends Converter<?>> converterClass : converterClasses) {
                  delegatingConverter.addConverter(createConverter(converterClass));
              }
          }
  
          delegatingConverter.addConverter(new ConfigurationItemConverter());
          delegatingConverter.addConverter(getResourceConverter());
          delegatingConverter.addConverter(new StandardTypeConverter(delegatingConverter));
  
          delegatingConverter.initializeAll(_injectionManager);
  
          @SuppressWarnings("unchecked")
          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 converterClasses
  an optional collection of custom converters to apply when
  deserializing
  @return a Java object matching the String representation