Пояснение: этот вопрос касался 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
.