Class MessageBodyFactory
java.lang.Object
org.glassfish.jersey.message.internal.MessageBodyFactory
- All Implemented Interfaces:
MessageBodyWorkers
A factory for managing
MessageBodyReader, MessageBodyWriter instances.- Author:
- Paul Sandoz, Marek Potociar, Jakub Podlesak
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classConfigurator which initializes and registerMessageBodyWorkersinstance intoInjectionManagerandBootstrapBag. -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionMessageBodyFactory(Configuration configuration) Create a new message body factory. -
Method Summary
Modifier and TypeMethodDescription<T> MessageBodyReader<T>getMessageBodyReader(Class<T> c, Type t, Annotation[] as, MediaType mediaType) Get a message body reader that matches a set of criteria.<T> MessageBodyReader<T>getMessageBodyReader(Class<T> c, Type t, Annotation[] as, MediaType mediaType, PropertiesDelegate propertiesDelegate) Get a message body reader that matches a set of criteria.getMessageBodyReaderMediaTypes(Class<?> type, Type genericType, Annotation[] annotations) Get the list of media types supported for a Java type.Get the list of media types supported for a Java type.getMessageBodyReadersForType(Class<?> type) Get a list ofMessageBodyReaders that are suitable for the giventype.<T> MessageBodyWriter<T>getMessageBodyWriter(Class<T> c, Type t, Annotation[] as, MediaType mediaType) Get a message body writer that matches a set of criteria.<T> MessageBodyWriter<T>getMessageBodyWriter(Class<T> c, Type t, Annotation[] as, MediaType mediaType, PropertiesDelegate propertiesDelegate) Get a message body writer that matches a set of criteria.getMessageBodyWriterMediaType(Class<?> c, Type t, Annotation[] as, List<MediaType> acceptableMediaTypes) Get the most acceptable media type supported for a Java type given a set of acceptable media types.getMessageBodyWriterMediaTypes(Class<?> c, Type t, Annotation[] as) Get the list of media types supported for a Java type.Get the list of media types supported for a Java type.getMessageBodyWritersForType(Class<?> type) Get a list ofMessageBodyWriters that are suitable for the giventype.getReaderModelsForType(Class<?> type) Get a list ofMessageBodyReadermodels that are suitable for the giventype.getReaders(MediaType mediaType) Get the map of media type to list of message body writers that are compatible with a media type.getWriters(MediaType mediaType) Get the map of media type to list of message body writers that are compatible with a media type.getWritersModelsForType(Class<?> type) Get a list ofMessageBodyWritermodels that are suitable for the giventype.voidinitialize(InjectionManager injectionManager) Must be initialize at the time of completed populatedInjectionManager.static booleanisReadable(MessageBodyReader<?> provider, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) Safely invokesisReadablemethod on the supplied provider.static booleanisWriteable(MessageBodyWriter<?> provider, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) Safely invokesisWriteablemethod on the supplied provider.readersToString(Map<MediaType, List<MessageBodyReader>> readers) Convert a map media type to list of message body readers to a string.readFrom(Class<?> rawType, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, PropertiesDelegate propertiesDelegate, InputStream entityStream, Iterable<ReaderInterceptor> readerInterceptors, boolean translateNce) Reads a type from theentityStreamusing interceptors.writersToString(Map<MediaType, List<MessageBodyWriter>> writers) Convert a map media type to list of message body writers to a string.writeTo(Object t, Class<?> rawType, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, PropertiesDelegate propertiesDelegate, OutputStream entityStream, Iterable<WriterInterceptor> writerInterceptors) Writers a type to theentityStreamusing interceptors.
-
Field Details
-
MEDIA_TYPE_KEY_COMPARATOR
Media type comparator.
-
-
Constructor Details
-
MessageBodyFactory
Create a new message body factory.- Parameters:
configuration- configuration. Optional - can be null.
-
-
Method Details
-
initialize
Must be initialize at the time of completed populatedInjectionManager.- Parameters:
injectionManager- completed injection manager.
-
getReaders
Description copied from interface:MessageBodyWorkersGet the map of media type to list of message body writers that are compatible with a media type.- Specified by:
getReadersin interfaceMessageBodyWorkers- Parameters:
mediaType- the compatible media type.- Returns:
- the map of media type to list of message body writers.
-
getWriters
Description copied from interface:MessageBodyWorkersGet the map of media type to list of message body writers that are compatible with a media type.- Specified by:
getWritersin interfaceMessageBodyWorkers- Parameters:
mediaType- the compatible media type.- Returns:
- the map of media type to list of message body writers.
-
readersToString
Description copied from interface:MessageBodyWorkersConvert a map media type to list of message body readers to a string.- Specified by:
readersToStringin interfaceMessageBodyWorkers- Parameters:
readers- the map media type to list of message body readers- Returns:
- the string representation.
-
writersToString
Description copied from interface:MessageBodyWorkersConvert a map media type to list of message body writers to a string.- Specified by:
writersToStringin interfaceMessageBodyWorkers- Parameters:
writers- the map media type to list of message body readers- Returns:
- the string representation.
-
getMessageBodyReader
public <T> MessageBodyReader<T> getMessageBodyReader(Class<T> c, Type t, Annotation[] as, MediaType mediaType) Description copied from interface:MessageBodyWorkersGet a message body reader that matches a set of criteria.- Specified by:
getMessageBodyReaderin interfaceMessageBodyWorkers- Type Parameters:
T- the type of object to be read.- Parameters:
c- the class of object to be read.t- the type of object to be produced. E.g. if the message body is to be converted into a method parameter, this will be the formal type of the method parameter as returned byClass.getGenericParameterTypes.as- an array of the annotations on the declaration of the artifact that will be initialized with the produced instance. E.g. if the message body is to be converted into a method parameter, this will be the annotations on that parameter returned byClass.getParameterAnnotations.mediaType- the media type of the data that will be read, this will be compared to the values ofConsumesfor each candidate reader and only matching readers will be queried.- Returns:
- a MessageBodyReader that matches the supplied criteria or null if none is found.
-
getMessageBodyReader
public <T> MessageBodyReader<T> getMessageBodyReader(Class<T> c, Type t, Annotation[] as, MediaType mediaType, PropertiesDelegate propertiesDelegate) Description copied from interface:MessageBodyWorkersGet a message body reader that matches a set of criteria.- Specified by:
getMessageBodyReaderin interfaceMessageBodyWorkers- Type Parameters:
T- the type of object to be read.- Parameters:
c- the class of object to be read.t- the type of object to be produced. E.g. if the message body is to be converted into a method parameter, this will be the formal type of the method parameter as returned byClass.getGenericParameterTypes.as- an array of the annotations on the declaration of the artifact that will be initialized with the produced instance. E.g. if the message body is to be converted into a method parameter, this will be the annotations on that parameter returned byClass.getParameterAnnotations.mediaType- the media type of the data that will be read, this will be compared to the values ofConsumesfor each candidate reader and only matching readers will be queried.propertiesDelegate- request-scoped properties delegate.- Returns:
- a MessageBodyReader that matches the supplied criteria or null if none is found.
-
getMessageBodyReaderMediaTypes
public List<MediaType> getMessageBodyReaderMediaTypes(Class<?> type, Type genericType, Annotation[] annotations) Description copied from interface:MessageBodyWorkersGet the list of media types supported for a Java type.- Specified by:
getMessageBodyReaderMediaTypesin interfaceMessageBodyWorkers- Parameters:
type- the class of object that is to be read.genericType- the type of object to be read. E.g. if the message body is to be read as a method parameter, this will be the declared type of the parameter as returned byMethod.getGenericParameterTypes.annotations- an array of the annotations on the declaration of the artifact that will be read. E.g. if the message body is to be consumed as a method parameter, this will be the annotations on that parameter returned byMethod.getParameterAnnotations.- Returns:
- the list of supported media types, the list is ordered as follows: a/b < a/* < *\\/*
-
getMessageBodyWriter
public <T> MessageBodyWriter<T> getMessageBodyWriter(Class<T> c, Type t, Annotation[] as, MediaType mediaType) Description copied from interface:MessageBodyWorkersGet a message body writer that matches a set of criteria.- Specified by:
getMessageBodyWriterin interfaceMessageBodyWorkers- Type Parameters:
T- the type of the object that is to be written.- Parameters:
c- the class of object that is to be written.t- the type of object to be written. E.g. if the message body is to be produced from a field, this will be the declared type of the field as returned byField.getGenericType.as- an array of the annotations on the declaration of the artifact that will be written. E.g. if the message body is to be produced from a field, this will be the annotations on that field returned byField.getDeclaredAnnotations.mediaType- the media type of the data that will be written, this will be compared to the values ofProducesfor each candidate writer and only matching writers will be queried.- Returns:
- a MessageBodyReader that matches the supplied criteria or null if none is found.
-
getMessageBodyWriter
public <T> MessageBodyWriter<T> getMessageBodyWriter(Class<T> c, Type t, Annotation[] as, MediaType mediaType, PropertiesDelegate propertiesDelegate) Description copied from interface:MessageBodyWorkersGet a message body writer that matches a set of criteria.- Specified by:
getMessageBodyWriterin interfaceMessageBodyWorkers- Type Parameters:
T- the type of the object that is to be written.- Parameters:
c- the class of object that is to be written.t- the type of object to be written. E.g. if the message body is to be produced from a field, this will be the declared type of the field as returned byField.getGenericType.as- an array of the annotations on the declaration of the artifact that will be written. E.g. if the message body is to be produced from a field, this will be the annotations on that field returned byField.getDeclaredAnnotations.mediaType- the media type of the data that will be written, this will be compared to the values ofProducesfor each candidate writer and only matching writers will be queried.propertiesDelegate- request-scoped properties delegate.- Returns:
- a MessageBodyReader that matches the supplied criteria or null if none is found.
-
getMessageBodyWriterMediaTypes
Description copied from interface:MessageBodyWorkersGet the list of media types supported for a Java type.- Specified by:
getMessageBodyWriterMediaTypesin interfaceMessageBodyWorkers- Parameters:
c- the class of object that is to be written.t- the type of object to be written. E.g. if the message body is to be produced from a field, this will be the declared type of the field as returned byField.getGenericType.as- an array of the annotations on the declaration of the artifact that will be written. E.g. if the message body is to be produced from a field, this will be the annotations on that field returned byField.getDeclaredAnnotations.- Returns:
- the list of supported media types, the list is ordered as follows: a/b < a/* < *\\/*
-
getMessageBodyWritersForType
Description copied from interface:MessageBodyWorkersGet a list ofMessageBodyWriters that are suitable for the giventype. The list is sorted based on the class hierarchy (most specific writers are first).- Specified by:
getMessageBodyWritersForTypein interfaceMessageBodyWorkers- Parameters:
type- the class of object writers are requested for.- Returns:
- the list of supported
MessageBodyWriters for given class.
-
getWritersModelsForType
Description copied from interface:MessageBodyWorkersGet a list ofMessageBodyWritermodels that are suitable for the giventype. The list is sorted based on the class hierarchy (most specific writers are first).- Specified by:
getWritersModelsForTypein interfaceMessageBodyWorkers- Parameters:
type- the class of object writers are requested for.- Returns:
- the list of supported
MessageBodyWritermodels for given class.
-
getMessageBodyWriterMediaTypesByType
Description copied from interface:MessageBodyWorkersGet the list of media types supported for a Java type.- Specified by:
getMessageBodyWriterMediaTypesByTypein interfaceMessageBodyWorkers- Parameters:
type- the class of object that is to be written.- Returns:
- the list of supported media types, the list is ordered as follows: a/b < a/* < *\\/*
-
getMessageBodyReaderMediaTypesByType
Description copied from interface:MessageBodyWorkersGet the list of media types supported for a Java type.- Specified by:
getMessageBodyReaderMediaTypesByTypein interfaceMessageBodyWorkers- Parameters:
type- the class of object that is to be read.- Returns:
- the list of supported media types, the list is ordered as follows: a/b < a/* < *\\/*
-
getMessageBodyReadersForType
Description copied from interface:MessageBodyWorkersGet a list ofMessageBodyReaders that are suitable for the giventype. The list is sorted based on the class hierarchy (most specific readers are first).- Specified by:
getMessageBodyReadersForTypein interfaceMessageBodyWorkers- Parameters:
type- the class of object readers are requested for.- Returns:
- the list of supported
MessageBodyReaders for given class.
-
getReaderModelsForType
Description copied from interface:MessageBodyWorkersGet a list ofMessageBodyReadermodels that are suitable for the giventype. The list is sorted based on the class hierarchy (most specific readers are first).- Specified by:
getReaderModelsForTypein interfaceMessageBodyWorkers- Parameters:
type- the class of object readers are requested for.- Returns:
- the list of supported
MessageBodyReadermodels for given class.
-
getMessageBodyWriterMediaType
public MediaType getMessageBodyWriterMediaType(Class<?> c, Type t, Annotation[] as, List<MediaType> acceptableMediaTypes) Description copied from interface:MessageBodyWorkersGet the most acceptable media type supported for a Java type given a set of acceptable media types.- Specified by:
getMessageBodyWriterMediaTypein interfaceMessageBodyWorkers- Parameters:
c- the class of object that is to be written.t- the type of object to be written. E.g. if the message body is to be produced from a field, this will be the declared type of the field as returned byField.getGenericType.as- an array of the annotations on the declaration of the artifact that will be written. E.g. if the message body is to be produced from a field, this will be the annotations on that field returned byField.getDeclaredAnnotations.acceptableMediaTypes- the list of acceptable media types, sorted according to the quality with the media type of highest quality occurring first first.- Returns:
- the best media types
-
readFrom
public Object readFrom(Class<?> rawType, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, PropertiesDelegate propertiesDelegate, InputStream entityStream, Iterable<ReaderInterceptor> readerInterceptors, boolean translateNce) throws WebApplicationException, IOExceptionDescription copied from interface:MessageBodyWorkersReads a type from theentityStreamusing interceptors. If the parameterinterceptis true thenreader interceptorsare executed before calling themessage body reader. The appropriatemessage body readeris chosen after the interceptor execution based on parameter passed to this method and modified by the interceptors.- Specified by:
readFromin interfaceMessageBodyWorkers- Parameters:
rawType- raw Java entity type.type- generic Java entity type.annotations- an array of the annotations on the declaration of the artifact that will be initialized with the produced instance. E.g. if the message body is to be converted into a method parameter, this will be the annotations on that parameter returned byMethod.getParameterAnnotations.mediaType- the media type of the HTTP entity.httpHeaders- the mutable HTTP headers associated with HTTP entity.propertiesDelegate- request-scoped properties delegate.entityStream- theInputStreamof the HTTP entity. The stream is not closed after reading the entity.readerInterceptors- Reader interceptor that are to be used to intercept the reading of an entity. The interceptors will be executed in the same order as given in this parameter.translateNce- iftrue, theNoContentExceptionthrown by a selected message body reader will be translated into aBadRequestExceptionas required by JAX-RS specification on the server side.- Returns:
- the entity that was read from the
entityStream. - Throws:
WebApplicationException- Thrown whenmessage body readerfails.IOException- Thrown when reading from theentityStreamfails.
-
writeTo
public OutputStream writeTo(Object t, Class<?> rawType, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, PropertiesDelegate propertiesDelegate, OutputStream entityStream, Iterable<WriterInterceptor> writerInterceptors) throws IOException, WebApplicationExceptionDescription copied from interface:MessageBodyWorkersWriters a type to theentityStreamusing interceptors. If the parameterinterceptis true thenwriter interceptorsare executed before calling themessage body writer. The appropriatemessage body writeris chosen after the interceptor execution based on parameter passed to this method and modified by the interceptors.- Specified by:
writeToin interfaceMessageBodyWorkers- Parameters:
t- Entity to be written to the entityStreamrawType- raw Java entity type.type- generic Java entity type.annotations- an array of the annotations on the resource method that returns the object.mediaType- the media type of the HTTP entity.httpHeaders- the mutable HTTP headers associated with HTTP entity.propertiesDelegate- request-scoped properties delegate.entityStream- theOutputStreamfor the HTTP entity.writerInterceptors- Writer interceptor that are to be used to intercept the writing of an entity. The interceptors will be executed in the same order as given in this parameter.- Returns:
- Outer output stream that should be closed by the caller.
- Throws:
IOException- Thrown when reading from theentityStreamfails.WebApplicationException- Thrown whenmessage body readerfails.
-
isWriteable
public static boolean isWriteable(MessageBodyWriter<?> provider, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) Safely invokesisWriteablemethod on the supplied provider. Any exceptions will be logged at finer level.- Parameters:
provider- message body writer on which theisWriteableshould be invoked.type- the class of instance that is to be written.genericType- the type of instance to be written, obtained either by reflection of a resource method return type or via inspection of the returned instance.GenericEntityprovides a way to specify this information at runtime.annotations- an array of the annotations attached to the message entity instance.mediaType- the media type of the HTTP entity.- Returns:
trueif the type is supported, otherwisefalse.
-
isReadable
public static boolean isReadable(MessageBodyReader<?> provider, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) Safely invokesisReadablemethod on the supplied provider. Any exceptions will be logged at finer level.- Parameters:
provider- message body reader on which theisReadableshould be invoked. Safely invokesisReadablemethod on the underlying provider.type- the class of instance to be produced.genericType- the type of instance to be produced. E.g. if the message body is to be converted into a method parameter, this will be the formal type of the method parameter as returned byMethod.getGenericParameterTypes.annotations- an array of the annotations on the declaration of the artifact that will be initialized with the produced instance. E.g. if the message body is to be converted into a method parameter, this will be the annotations on that parameter returned byMethod.getParameterAnnotations.mediaType- the media type of the HTTP entity, if one is not specified in the request thenapplication/octet-streamis used.- Returns:
trueif the type is supported, otherwisefalse.
-