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); }
public static ObjectToMimeContentConverter getBestFitObjectToMimeContentConverter(Object object, Class<?> typeHint) { ObjectToMimeContentConverter converter = null; for (ObjectToMimeContentConverter candidate : _classToMimeContentConverters.get(typeHint)) { if (candidate.isAcceptable(object)) { if (converter == null || candidate.getRank() > converter.getRank()) { converter = candidate; } } } return converter; } }
final byte[] messageContent = converter == null ? new byte[] {} : converter.toMimeContent(messageBody); String mimeType = converter == null ? null : converter.getMimeType();
final byte[] messageContent = converter.toMimeContent(bodyObject); String mimeType = converter.getMimeType(); if (bodyObject instanceof byte[])
try messageContent = converter == null ? new byte[] {} : converter.toMimeContent(messageBody); + " conversion of message content failed.", e); String mimeType = converter == null ? null : converter.getMimeType();
public static ObjectToMimeContentConverter getBestFitObjectToMimeContentConverter(Object object) { ObjectToMimeContentConverter converter = null; if (object != null) { final List<Class<?>> classes = new ArrayList<>(Arrays.asList(object.getClass().getInterfaces())); classes.add(object.getClass()); for (Class<?> i : classes) { for (ObjectToMimeContentConverter candidate : _classToMimeContentConverters.get(i)) { if (candidate.isAcceptable(object)) { if (converter == null || candidate.getRank() > converter.getRank()) { converter = candidate; } } } } } return converter; }