Совместимость ContainerResponseFilter в джерси 1.17

Могу ли я запустить свой CustomFilter расширенный с ContainerResponseFilter в Джерси1.17. Я использую GrizzlyWebServer. Пожалуйста, предложите. Ниже приведен мой пример кода сервера для добавления фильтра.

   GrizzlyWebServer webServer = new GrizzlyWebServer(.............);
    ....
    ....

    ServletAdapter adapter3 = new ServletAdapter();
    adapter3.addInitParameter("com.sun.jersey.config.property.packages", "com.motilink.server.services");
    adapter3.setContextPath("/");
    adapter3.setServletInstance(new ServletContainer());
    adapter3.addContextParameter(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, PoweredbyResponseFilter.class.getName());
    webServer.addGrizzlyAdapter(adapter3, new String[]{"/"});

   ...
   .....

2 ответа

Добавьте свойство ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS как init-param а не как context-param:

...
adapter3.addInitParameter(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, PoweredbyResponseFilter.class.getName());
...

РЕДАКТИРОВАТЬ 1

Из вашего ответа кажется, что вы на самом деле пытаетесь использовать среду выполнения Jersey 1.x (1.17) с реализованными провайдерами JAX-RS 2.0 (ContainerRequestContext а также ContainerResponseContext были представлены в JAX-RS 2.0, и Jersey 1.x не знает, как их использовать).

Поэтому мой совет: удалите все зависимости от Jersey 1.17 и замените их зависимостями Jersey 2.x. Взгляните на наш пример helloworld-webapp (особенно в классе App), чтобы узнать, как создать экземпляр сервера Grizzly с приложением JAX-RS.

Обратите внимание, что достаточно добавить только свойство ServerProperties.PROVIDER_PACKAGES в init-params, а также ваши ресурсы и поставщики (включая фильтры ответов) будут отсканированы и зарегистрированы в приложении.

МОЙ Фильтр:

 @FrontierResponse
 @Provider
 public class PoweredbyResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
        throws IOException {
    System.out.println("hell");
    responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");

}

}

Класс ресурса:

@NameBinding
@Retention(value = RetentionPolicy.RUNTIME)
public @interface FrontierResponse {
}

@GET
@Produces("text/plain")
@Path("plain")
//@FrontierResponse
public String getMessage() {
    System.out.println("hello world called");
    return "Hello World";
}

и, наконец, я звоню из браузера http:// localhost:4464/plain

Другие вопросы по тегам