Создать провайдера JAX-RS для создания образа Java из InputStream - PullRequest
3 голосов
/ 27 апреля 2011

Я пытаюсь создать класс провайдера image / jpeg jax-rs, который создает изображение для моего веб-сервиса, основанного на отдыхе. Я не могу сформулировать запрос для проверки ниже, как проще всего это проверить?

 @POST
 @Path("/upload")
 @Consumes("image/jpeg")
 public Response createImage(Image image)
 {
    image.toString(); //temp code here just to see if service gets hit
    return null;
 }

import java.awt.Image;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.imageio.ImageIO;
import javax.ws.rs.Consumes;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import org.springframework.stereotype.Component;


@Provider
@Consumes("image/jpeg")
@Component("ImageProvider")  //spring way to register resource
class ImageProvider implements MessageBodyReader<Image> {

    public Image readFrom(Class<Image> type,
                                Type genericType,
                                Annotation[] annotations,
                                MediaType mediaType,
                                MultivaluedMap<String, String> httpHeaders,
                                InputStream entityStream) throws IOException,
        WebApplicationException {
        Image originalImage = ImageIO.read(entityStream);
        return originalImage;
    }

    public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2, MediaType arg3) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

1 Ответ

3 голосов
/ 28 апреля 2011

Если ваш провайдер также реализует MessageBodyWriter, вы можете использовать клиентскую библиотеку (например, Wink Client ) и использовать того же провайдера для отправки изображения:

Пример кода с Wink:

ClientConfig config = new ClientConfig();
Application application = // create application that contains ImageProvider 
config.applications(application);
RestClient restClient = new RestClient(config);
URI uri = // uri to server
Image image = // create image
restClient.resource(uri).contentType("image/jpeg").post(image);

Кстати, в вашем провайдере есть ошибка: вы ДОЛЖНЫ реализовать метод isReadable, поэтому он вернет true для правильного типа и класса носителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...