code: @Override
    public Identifier getNewInstance(final String str) {
  
      final int index = str.indexOf("://");
      if (index < 0) {
        throw new RemoteRuntimeException("Invalid remote identifier name: " + str);
      }
  
      final String type = str.substring(0, index);
      final Class<? extends Identifier> clazz = typeToClazzMap.get(type);
  
      try {
  
        final Constructor<? extends Identifier> constructor = clazz.getDeclaredConstructor(CONSTRUCTOR_ARG_TYPES);
        final Object[] args = new Object[] {str.substring(index + 3)};
  
        final Identifier instance = constructor.newInstance(args);
        LOG.log(Level.FINER, "Created new identifier: {0} for {1}", new Object[] {instance, str});
        return instance;
  
      } catch (final NoSuchMethodException | SecurityException | InstantiationException
          | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
        LOG.log(Level.SEVERE, "Cannot create new identifier for: " + str, e);
        throw new RemoteRuntimeException(e);
      }
    }
docs: Creates a new remote identifier instance.
  
  @param str a string representation
  @return a remote identifier
  @throws RemoteRuntimeException