private void loadForeignMarshallables(GlobalConfiguration globalCfg) {
    log.trace("Loading user defined externalizers");
    for (Map.Entry<Integer, AdvancedExternalizer<?>> config :
        globalCfg.serialization().advancedExternalizers().entrySet()) {
      AdvancedExternalizer<?> ext = config.getValue();

      // If no XML or programmatic config, id in annotation is used
      // as long as it's not default one (meaning, user did not set it).
      // If XML or programmatic config in use ignore @Marshalls annotation and use value in config.
      Integer id = ext.getId();
      if (config.getKey() == null && id == null)
        throw new CacheConfigurationException(
            String.format(
                "No advanced externalizer identifier set for externalizer %s",
                ext.getClass().getName()));
      else if (config.getKey() != null) id = config.getKey();

      id = checkForeignIdLimit(id, ext);
      updateExtReadersWritersWithTypes(
          new ForeignExternalizerAdapter(id, ext), generateForeignReaderIndex(id));
    }
  }
 void addInternalExternalizer(AdvancedExternalizer<?> ext) {
   int id = checkInternalIdLimit(ext.getId(), ext);
   updateExtReadersWritersWithTypes(new ExternalizerAdapter(id, ext));
 }