code: private <T extends Assignable> ExtensionWrapper loadExtensionWrapper(final InputStream extensionStream,
          Class<T> extensionClass) {
          Properties properties = new Properties();
          try {
              properties.load(extensionStream);
          } catch (IOException e) {
              throw new RuntimeException("Could not open stream for extensionURL " + extensionStream, e);
          }
          String implementingClassName = (String) properties.get("implementingClassName");
          if (implementingClassName == null) {
              throw new RuntimeException("Property implementingClassName is not present in " + extensionStream);
          }
          final Map<String, String> map = new HashMap<String, String>(properties.size());
          final Enumeration<Object> keys = properties.keys();
          while (keys.hasMoreElements()) {
              final String key = (String) keys.nextElement();
              final String value = (String) properties.get(key);
              map.put(key, value);
          }
          return new ExtensionWrapper(implementingClassName, map, extensionClass);
      }
docs: Wraps the provider-configuration file <code>extensionStream</code>, the SPI <code>extensionClass</code> and its
  implementation class name into a {@link ExtensionWrapper} instance.
  
  @param <T>
  @param extensionStream
  - a bytes stream representation of the provider-configuration file
  @param extensionClass
  - SPI type
  @return a {@link ExtensionWrapper} instance