code: private <T> void _registerMicroElementTypeConverter (@Nonnull final Class <T> aClass,
                                                         @Nonnull final IMicroTypeConverter <T> aConverter)
    {
      ValueEnforcer.notNull (aClass, "Class");
      ValueEnforcer.notNull (aConverter, "Converter");
  
      m_aRWLock.writeLocked ( () -> {
        // The main class should not already be registered
        if (m_aMap.containsKey (aClass))
          throw new IllegalArgumentException ("A micro type converter for class " + aClass + " is already registered!");
  
        if (m_bUseClassHierarchy)
        {
          // Automatically register the class, and all parent classes/interfaces
          for (final WeakReference <Class <?>> aCurWRSrcClass : ClassHierarchyCache.getClassHierarchyIterator (aClass))
          {
            final Class <?> aCurSrcClass = aCurWRSrcClass.get ();
            if (aCurSrcClass != null)
              if (!m_aMap.containsKey (aCurSrcClass))
              {
                m_aMap.put (aCurSrcClass, aConverter);
                if (LOGGER.isDebugEnabled ())
                  LOGGER.debug ("Registered micro type converter for '" + aCurSrcClass.toString () + "'");
              }
          }
        }
        else
        {
          m_aMap.put (aClass, aConverter);
          if (LOGGER.isDebugEnabled ())
            LOGGER.debug ("Registered micro type converter for '" + aClass.toString () + "'");
        }
      });
    }
docs: Register type converters from and to XML (IMicroElement). This method is
  private to avoid later modification of the available type converters,
  because this may lead to unexpected results.
  
  @param aClass
  The class to be registered.
  @param aConverter
  The type converter from and to XML