MessageBodyWorks
javax.ws.rs.ext.MessageBodyWorks is a simple injectable interface that allows you to look up MessageBodyReaders and Writers. It is very useful, for instance, for implementing multipart providers. Content types that embed other random content types.
/** * An injectable interface providing lookup of {@link MessageBodyReader} and * {@link MessageBodyWriter} instances. * * @see javax.ws.rs.core.Context * @see MessageBodyReader * @see MessageBodyWriter */ public interface MessageBodyWorkers { /** * Get a message body reader that matches a set of criteria. * * @param mediaType the media type of the data that will be read, this will * be compared to the values of {@link javax.ws.rs.ConsumeMime} for * each candidate reader and only matching readers will be queried. * @param type the class of object to be produced. * @param genericType 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 by * <code>Class.getGenericParameterTypes</code>. * @param 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 by * <code>Class.getParameterAnnotations</code>. * @return a MessageBodyReader that matches the supplied criteria or null * if none is found. */ public abstract <T> MessageBodyReader<T> getMessageBodyReader(Class<T> type, Type genericType, Annotation annotations[], MediaType mediaType); /** * Get a message body writer that matches a set of criteria. * * @param mediaType the media type of the data that will be written, this will * be compared to the values of {@link javax.ws.rs.ProduceMime} for * each candidate writer and only matching writers will be queried. * @param type the class of object that is to be written. * @param genericType 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 by * <code>Field.getGenericType</code>. * @param annotations 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 by * <code>Field.getDeclaredAnnotations</code>. * @return a MessageBodyReader that matches the supplied criteria or null * if none is found. */ public abstract <T> MessageBodyWriter<T> getMessageBodyWriter(Class<T> type, Type genericType, Annotation annotations[], MediaType mediaType); }
Injectable
MessageBodyWorkers are injectable into MessageBodyReader or Writers:
@Provider @ConsumeMime("multipart/fixed") public class MultipartProvider implements MessageBodyReader { private @Context MessageBodyWorkers workers; ... }
Comments