docs: <T> void registerSPIs(final URL pResource, final Class<T> pCategory, final ClassLoader pLoader) {
          Properties classNames = new Properties();
  
          try {
              classNames.load(pResource.openStream());
          }
          catch (IOException e) {
              throw new ServiceConfigurationError(e);
          }
  
          if (!classNames.isEmpty()) {
              @SuppressWarnings({"unchecked"})
              CategoryRegistry<T> registry = categoryMap.get(pCategory);
  
              Set providerClassNames = classNames.keySet();
  
              for (Object providerClassName : providerClassNames) {
                  String className = (String) providerClassName;
                  try {
                      @SuppressWarnings({"unchecked"})
                      Class<T> providerClass = (Class<T>) Class.forName(className, true, pLoader);
                      T provider = providerClass.newInstance();
                      registry.register(provider);
                  }
                  catch (ClassNotFoundException e) {
                      throw new ServiceConfigurationError(e);
                  }
                  catch (IllegalAccessException e) {
                      throw new ServiceConfigurationError(e);
                  }
                  catch (InstantiationException e) {
                      throw new ServiceConfigurationError(e);
                  }
                  catch (IllegalArgumentException e) {
                      throw new ServiceConfigurationError(e);
                  }
              }
          }
      }