JAX-RS со встроенным сервером

Пояснение: этот вопрос касался GZIP-пинга службы REST на основе JAX-WS, но я решил изменить тему, чтобы упростить поиск

I Я реализую службу REST через JAX-WS Provider и публикую ее со стандартной конечной точкой (причина в том, что я хочу избежать использования контейнера сервлетов или сервера приложений) .

Есть ли способ заставить сервер архивировать содержимое ответа, если присутствует Accept-Encoding: gzip ?


КАК

На самом деле образцы предоставлены nicore работает, и это позволяет вам создать сервер в стиле JAX-RS поверх встроенного облегченного сервера без контейнера сервлетов, но есть несколько моментов, которые следует учитывать.

Если вы предпочитаете управлять классами самостоятельно (и экономить время при запуске), вы можете использовать следующее:

Пример

JAX-RS hello world class:

@Path("/helloworld")
public class RestServer {

    @GET
    @Produces("text/html")
    public String getMessage(){
        System.out.println("sayHello()");
        return "Hello, world!";
    }
}

Основной метод:

Для Простой Сервер:

public static void main(String[] args) throws Exception{
    DefaultResourceConfig resourceConfig = new DefaultResourceConfig(RestServer.class);
    // The following line is to enable GZIP when client accepts it
    resourceConfig.getContainerResponseFilters().add(new GZIPContentEncodingFilter());
    Closeable server = SimpleServerFactory.create("http://0.0.0.0:5555", resourceConfig);
    try {
        System.out.println("Press any key to stop the service...");
        System.in.read();
    } finally {
        server.close();
    }
}

Для Grizzly2 :

public static void main(String[] args) throws Exception{
    DefaultResourceConfig resourceConfig = new DefaultResourceConfig(RestServer.class);
    // The following line is to enable GZIP when client accepts it
    resourceConfig.getContainerResponseFilters().add(new GZIPContentEncodingFilter());
    HttpServer server = GrizzlyServerFactory.createHttpServer("http://0.0.0.0:5555" , resourceConfig);
    try {
        System.out.println("Press any key to stop the service...");
        System.in.read();
    } finally {
        server.stop();
    }
}

Устраненные зависимости:

Простой:

Grizzly:

Джерси:

Уведомление

Убедитесь, что javax.ws.rs архив не попал в ваш путь к классам, так как он конфликтует с реализацией Джерси. Хуже всего здесь является тихая ошибка 404 без регистрации - в журнал записывается только небольшая заметка на уровне FINER .

17
задан Alex Abdugafarov 29 November 2011 в 09:37
поделиться