Разъяснение: этот вопрос касался GZIPping службы REST на основе JAX-WS, но я решил изменить тему, чтобы было легче найти
Я реализую службу REST через JAX-WS Provider <Source>
и публикую ее со стандартным Endpoint
(причина в том, что я хочу избежать использования контейнера сервлетов или сервера приложений).
Есть ли способ сделать сервер для содержимого ответа gzip, если присутствует Accept-Encoding: gzip
?
HOW-TO
Образцы, предоставленные nicore
, действительно работают, и это позволяет вам создавать сервер JAX-RS поверх встроенного облегченного сервера без контейнера сервлета, но есть несколько моментов, которые следует учитывать.
Если вы предпочитаете самостоятельно управлять классами (и сохранять время во время запуска), вы можете использовать следующее:
Пример
JAX-RS привет мирового класса:
@Path("/helloworld")
public class RestServer {
@GET
@Produces("text/html")
public String getMessage(){
System.out.println("sayHello()");
return "Hello, world!";
}
}
Основной метод:
Для Simple Сервер:
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:
- grizzly-framework
- grizzly-http
- grizzly-http-server (другой репозиторий!)
- jersey-grizzly2
Джерси:
Примечание
Убедитесь, что архив javax.ws.rs
не попал в ваш путь к классу, поскольку он противоречит реализации Джерси. Самое худшее здесь - это бесшумная ошибка 404 без регистрации - регистрируется только небольшое примечание на уровне FINER
.