public MediaType getMessageBodyWriterMediaTypeLimitByIsWritable(Class<?> type,
RuntimeContext runtimeContext) {
logger.trace("Searching MessageBodyWriters media types limited by class type {}", type);
List<MediaTypeMap<MessageBodyWriter<?>>.OFHolder<MessageBodyWriter<?>>> writerFactories =
messageBodyWriters.getProvidersByMediaType(MediaType.WILDCARD_TYPE, type);
logger.trace("Found all MessageBodyWriter ObjectFactories limited by class type {}",
writerFactories);
Annotation[] ann = new Annotation[0];
for (MediaTypeMap<MessageBodyWriter<?>>.OFHolder<MessageBodyWriter<?>> factory : writerFactories) {
MessageBodyWriter<?> writer = factory.getInstance(runtimeContext);
Produces produces = factory.getInstanceClass().getAnnotation(Produces.class);
String[] values = null;
if (produces != null) {
values = AnnotationUtils.parseConsumesProducesValues(produces.value());
} else {
values = new String[] {MediaType.WILDCARD};
}
for (String v : values) {
MediaType mt = MediaType.valueOf(v);
if (isWriteable(writer, type, type, ann, mt, runtimeContext, factory.isSystemProvider)) {
logger.trace("Returning media type {}", mt);
return mt;
}
}
}
return null;
}