List<ExternalizerConfig> configs = type.getExternalizerConfigs();
for (ExternalizerConfig config : configs) {
Externalizer ext = config.getExternalizer() != null ? config.getExternalizer()
: (Externalizer) Util.getInstance(config.getExternalizerClass());
Marshalls marshalls = ReflectionUtil.getAnnotation(ext.getClass(), Marshalls.class);
// 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.
int id = marshalls.id();
if (config.getId() == null && id == Integer.MAX_VALUE)
throw new ConfigurationException(String.format(
"No externalizer identifier set for externalizer %s", ext.getClass().getName()));
else if (config.getId() != null)
id = config.getId();