/** * Creates a new instance. */ public MediaTypeSet(Iterable<MediaType> mediaTypes) { final Set<MediaType> mediaTypesCopy = new LinkedHashSet<>(); // Using a Set to deduplicate for (MediaType mediaType : requireNonNull(mediaTypes, "mediaTypes")) { requireNonNull(mediaType, "mediaTypes contains null."); checkArgument(!mediaType.hasWildcard(), "mediaTypes contains a wildcard media type: %s", mediaType); // Ensure qvalue does not exists. final List<String> otherQValues = mediaType.parameters().get(Q); checkArgument(otherQValues == null || otherQValues.isEmpty(), "mediaTypes contains a media type with a q-value parameter: %s", mediaType); mediaTypesCopy.add(mediaType); } this.mediaTypes = mediaTypesCopy.toArray(EMPTY_MEDIA_TYPES); }
/** * Returns the list of {@link MediaType}s specified by {@link Produces} annotation. */ private static List<MediaType> producibleMediaTypes(Method method, Class<?> clazz) { List<Produces> produces = findAll(method, Produces.class); List<ProduceType> produceTypes = findAll(method, ProduceType.class); if (produces.isEmpty() && produceTypes.isEmpty()) { produces = findAll(clazz, Produces.class); produceTypes = findAll(clazz, ProduceType.class); } final List<MediaType> types = Stream.concat(produces.stream().map(Produces::value), produceTypes.stream().map(ProduceType::value)) .map(MediaType::parse) .peek(type -> { if (type.hasWildcard()) { throw new IllegalArgumentException( "Producible media types must not have a wildcard: " + type); } }) .collect(toImmutableList()); return ensureUniqueTypes(types, Produces.class); }