public List<ContextResolver> getContextResolvers(final Class<?> clazz, MediaType type) { MediaTypeMap<SortedKey<ContextResolver>> resolvers = getContextResolvers().get(clazz); if (resolvers == null) return null; List<ContextResolver> rtn = new ArrayList<ContextResolver>(); List<SortedKey<ContextResolver>> list = resolvers.getPossible(type); list.forEach(resolver -> rtn.add(resolver.obj)); return rtn; }
.entrySet()) contextResolvers.put(entry.getKey(), entry.getValue().clone()); if (resolvers == null) resolvers = new MediaTypeMap<SortedKey<ContextResolver>>(); contextResolvers.put(parameterClass, resolvers); resolvers.add(mime, key); resolvers.add(new MediaType("*", "*"), key);
/** * Returns a list of objects sorted based on their media type where the first in the list * is the best match * * @param accept mime to match * @return list of objects */ public List<T> getPossible(MediaType accept) { accept = new MediaType(accept.getType().toLowerCase(), accept.getSubtype().toLowerCase(), accept.getParameters()); List<Entry<T>> matches = new ArrayList<Entry<T>>(); if (accept.isWildcardType()) { ArrayList<T> copy = new ArrayList<T>(); copy.addAll(everything); return copy; } else { matches.addAll(wildcards); SubtypeMap<T> indexed = index.get(accept.getType()); if (indexed != null) { matches.addAll(indexed.getPossible(accept)); } } Collections.sort(matches); return convert(matches); }
clientMessageBodyReaders = parent.getClientMessageBodyReaders().clone(); serverMessageBodyReaders = parent.getServerMessageBodyReaders().clone(); clientMessageBodyReaders.add(MediaType.valueOf(consume), key); serverMessageBodyReaders.add(MediaType.valueOf(consume), key); clientMessageBodyReaders.add(MediaType.valueOf(consume), key); serverMessageBodyReaders.add(MediaType.valueOf(consume), key); clientMessageBodyReaders.add(new MediaType("*", "*"), key); serverMessageBodyReaders.add(new MediaType("*", "*"), key); clientMessageBodyReaders.add(new MediaType("*", "*"), key); serverMessageBodyReaders.add(new MediaType("*", "*"), key);
MediaTypeMap<Class<?>> typeMap = new MediaTypeMap<Class<?>>(); List<Class<?>> list = typeMap.getPossible(mediaType); for (Class<?> decoratorAnnotation : list)
MediaTypeMap<Class<?>> typeMap = new MediaTypeMap<Class<?>>(); for (Class<?> decoratorAnnotation : meta.keySet()) typeMap.add(MediaType.valueOf(pType), decoratorAnnotation); List<Class<?>> list = typeMap.getPossible(mediaType); for (Class<?> decoratorAnnotation : list)
/** * Clear any instances of the given type from the {@link MediaTypeMap} by replacing them with the placeholder. * * Unfortunately removing the entries is tricky as they're scattered across multiple read-only nested maps. */ @SuppressWarnings({ "rawtypes", "unchecked" }) private static <T> void clearInstancesOf(Class type, MediaTypeMap<SortedKey<T>> mediaTypeMap, T placeholder) { for (SortedKey key : mediaTypeMap.getPossible(MediaType.WILDCARD_TYPE)) { if (type.isInstance(key.obj)) { key.readerClass = Void.class; key.template = Void.class; key.obj = placeholder; } } mediaTypeMap.getClassCache().clear(); }
providerInstances = parent == null ? new CopyOnWriteArraySet<>() : new CopyOnWriteArraySet<>(parent.getProviderInstances()); classContracts = parent == null ? new ConcurrentHashMap<>() : new ConcurrentHashMap<>(parent.getClassContracts()); serverMessageBodyReaders = parent == null ? new MediaTypeMap<>() : parent.getServerMessageBodyReaders().clone(); serverMessageBodyWriters = parent == null ? new MediaTypeMap<>() : parent.getServerMessageBodyWriters().clone(); clientMessageBodyReaders = parent == null ? new MediaTypeMap<>() : parent.getClientMessageBodyReaders().clone(); clientMessageBodyWriters = parent == null ? new MediaTypeMap<>() : parent.getClientMessageBodyWriters().clone(); sortedExceptionMappers = parent == null ? new ConcurrentHashMap<>() : new ConcurrentHashMap<>(parent.getSortedExceptionMappers()); asyncResponseProviders = parent == null ? new ConcurrentHashMap<>() : new ConcurrentHashMap<>(parent.getAsyncResponseProviders()); contextResolvers.put(entry.getKey(), entry.getValue().clone());
public MediaTypeMap<T> clone() { MediaTypeMap<T> clone = new MediaTypeMap<T>(); for (Map.Entry<String, SubtypeMap<T>> entry : index.entrySet()) { clone.index.put(entry.getKey(), entry.getValue().clone()); } clone.wildcards.addAll(wildcards); clone.all.addAll(all); clone.everything.addAll(everything); // don't clone class cache return clone; }
private void injectDecorator(MediaTypeMap<Class<?>> typeMap, Class<?> decoratorAnnotation, Decorator decorator) { String[] mediaTypes = {"*/*"}; DecorateTypes produces = decorator.processor().getAnnotation(DecorateTypes.class); if (produces != null) { mediaTypes = produces.value(); } for (String pType : mediaTypes) { typeMap.add(MediaType.valueOf(pType), decoratorAnnotation); } }
clientMessageBodyWriters = parent.getClientMessageBodyWriters().clone(); serverMessageBodyWriters = parent.getServerMessageBodyWriters().clone(); clientMessageBodyWriters.add(MediaType.valueOf(consume), key); serverMessageBodyWriters.add(MediaType.valueOf(consume), key); clientMessageBodyWriters.add(MediaType.valueOf(consume), key); serverMessageBodyWriters.add(MediaType.valueOf(consume), key); clientMessageBodyWriters.add(new MediaType("*", "*"), key); serverMessageBodyWriters.add(new MediaType("*", "*"), key); clientMessageBodyWriters.add(new MediaType("*", "*"), key); serverMessageBodyWriters.add(new MediaType("*", "*"), key);
MediaTypeMap<Class<?>> typeMap = new MediaTypeMap<Class<?>>(); List<Class<?>> list = typeMap.getPossible(mediaType); for (Class<?> decoratorAnnotation : list)
providerInstances = parent == null ? new CopyOnWriteArraySet<>() : new CopyOnWriteArraySet<>(parent.getProviderInstances()); classContracts = parent == null ? new ConcurrentHashMap<>() : new ConcurrentHashMap<>(parent.getClassContracts()); serverMessageBodyReaders = parent == null ? new MediaTypeMap<>() : parent.getServerMessageBodyReaders().clone(); serverMessageBodyWriters = parent == null ? new MediaTypeMap<>() : parent.getServerMessageBodyWriters().clone(); clientMessageBodyReaders = parent == null ? new MediaTypeMap<>() : parent.getClientMessageBodyReaders().clone(); clientMessageBodyWriters = parent == null ? new MediaTypeMap<>() : parent.getClientMessageBodyWriters().clone(); sortedExceptionMappers = parent == null ? new ConcurrentHashMap<>() : new ConcurrentHashMap<>(parent.getSortedExceptionMappers()); asyncResponseProviders = parent == null ? new ConcurrentHashMap<>() : new ConcurrentHashMap<>(parent.getAsyncResponseProviders()); contextResolvers.put(entry.getKey(), entry.getValue().clone());
public MediaTypeMap<T> clone() { MediaTypeMap<T> clone = new MediaTypeMap<T>(); for (Map.Entry<String, SubtypeMap<T>> entry : index.entrySet()) { clone.index.put(entry.getKey(), entry.getValue().clone()); } clone.wildcards.addAll(wildcards); clone.all.addAll(all); clone.everything.addAll(everything); // don't clone class cache return clone; }
private void injectDecorator(MediaTypeMap<Class<?>> typeMap, Class<?> decoratorAnnotation, Decorator decorator) { String[] mediaTypes = {"*/*"}; DecorateTypes produces = decorator.processor().getAnnotation(DecorateTypes.class); if (produces != null) { mediaTypes = produces.value(); } for (String pType : mediaTypes) { typeMap.add(MediaType.valueOf(pType), decoratorAnnotation); } }
@Deprecated private <T> MessageBodyReader<T> resolveMessageBodyReader(Class<T> type, Type genericType, Annotation[] annotations, MediaType mediaType, MediaTypeMap<SortedKey<MessageBodyReader>> availableReaders) { List<SortedKey<MessageBodyReader>> readers = availableReaders.getPossible(mediaType, type); //logger.info("******** getMessageBodyReader *******"); for (SortedKey<MessageBodyReader> reader : readers) { //logger.info(" matching reader: " + reader.getClass().getName()); if (reader.obj.isReadable(type, genericType, annotations, mediaType)) { LogMessages.LOGGER.debugf("MessageBodyReader: %s", reader.getClass().getName()); return (MessageBodyReader<T>) reader.obj; } } return null; }
protected void addClientMessageBodyReader(SortedKey<MessageBodyReader> key, Consumes consumeMime) { if (clientMessageBodyReaders == null) { clientMessageBodyReaders = parent.getClientMessageBodyReaders().clone(); } if (consumeMime != null) { for (String consume : consumeMime.value()) { MediaType mime = MediaType.valueOf(consume); clientMessageBodyReaders.add(mime, key); } } else { clientMessageBodyReaders.add(new MediaType("*", "*"), key); } }
for (Map.Entry<Class<?>, MediaTypeMap<SortedKey<ContextResolver>>> entry : parent.getContextResolvers().entrySet()) contextResolvers.put(entry.getKey(), entry.getValue().clone()); if (resolvers == null) resolvers = new MediaTypeMap<SortedKey<ContextResolver>>(); contextResolvers.put(parameterClass, resolvers); resolvers.add(mime, key); resolvers.add(new MediaType("*", "*"), key);
Collections.sort(newall); all = newall; everything = convert(newall);
public MediaTypeMap<T> clone() { MediaTypeMap<T> clone = new MediaTypeMap<T>(); for (Map.Entry<String, SubtypeMap<T>> entry : index.entrySet()) { clone.index.put(entry.getKey(), entry.getValue().clone()); } clone.wildcards.addAll(wildcards); clone.all.addAll(all); clone.everything.addAll(everything); // don't clone class cache return clone; }