private static Multimap<Class, ObjectToMimeContentConverter> buildClassToMimeConverters() { Multimap<Class, ObjectToMimeContentConverter> classToMineConverters = HashMultimap.create(); Iterable<ObjectToMimeContentConverter> objectToMimeContentConverters = new QpidServiceLoader().instancesOf(ObjectToMimeContentConverter.class); for(ObjectToMimeContentConverter converter : objectToMimeContentConverters) { Class objectClass = converter.getObjectClass(); for(ObjectToMimeContentConverter existing : classToMineConverters.get(objectClass)) { if (existing.getRank() == converter.getRank()) { LOGGER.warn("MIME converter for object class {} has two or more implementations" + " with the same rank {}. It is undefined which one will be used." + " Implementations are: {} {} ", existing.getObjectClass().getName(), existing.getRank(), existing.getClass().getName(), converter.getClass().getName()); } } classToMineConverters.put(objectClass, converter); } classToMineConverters.put(Void.class, new IdentityConverter()); return ImmutableMultimap.copyOf(classToMineConverters); }