Как зарегистрировать провайдера в Jersey 1.x через ResourceConfig?

Поскольку com.sun.jersey.api.core.ResourceConfig не содержит метода register.

Я хочу зарегистрировать ContainerResponseFilter программно.

Я также пытался зарегистрировать его через аннотацию @Provider:

@Provider
public class MyFilter implements ContainerRequestFilter, ContainerResponseFilter {
    @Override
    public ContainerRequest filter(ContainerRequest containerRequest) {

        return containerRequest;
    }
    @Override
    public ContainerResponse filter(ContainerRequest containerRequest, ContainerResponse containerResponse) {

        return containerResponse;
    }
}

Но не срабатывает.

Обновлять:

В веб.xml:

 <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>rest.providers</param-value>
  </init-param>

В логе сервера вижу:

com.sun.jersey.api.core.ScanningResourceConfig init INFO: Классы поставщиков не найдены.

Update2:
Добавлен класс:

public class MyApplication  extends ResourceConfig{


    public MyApplication(){
        getProviderClasses().add(LoggingFilter.class);
    }

конструктор не запускался.

В журнале сервера я вижу:

Mar 28, 2018 3:46:47 PM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
  rest.services
Mar 28, 2018 3:46:47 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class rest.services.RestRes1
Mar 28, 2018 3:46:47 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Mar 28, 2018 3:46:47 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM'

он находит только пакет с ресурсами, но не провайдеров.

Обновление 3:

Если я явно определяю свой класс провайдера в web.xml,

  <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>rest.services.MyFilter</param-value>
  </init-param>

Это работает нормально.

Но мне нужно сделать это программно.


person YerivanLazerev    schedule 28.03.2018    source источник
comment
Имя параметра должно быть com.sun.jersey.config.property.packages.   -  person cassiomolin    schedule 28.03.2018


Ответы (1)


Вы можете использовать один из следующих способов для регистрации провайдеров в Jersey 1.x:

В качестве альтернативы вы можете использовать PackagesResourceConfig< /a> для сканирования и регистрации классов ресурсов и поставщиков из одного или нескольких пакетов:

@ApplicationPath("resources")
public class MyApplication extends PackagesResourceConfig {

     public MyApplication() {
         super("org.foo.rest;org.bar.rest");
     }    
}

Джерси предлагает несколько вариантов развертывания в соответствии с вашей средой. Подробнее см. в документации.

person cassiomolin    schedule 28.03.2018
comment
Я обновил свой вопрос относительно вашего ответа, я должен просто добавить свой класс провайдера в getProviderClasses ()? - person YerivanLazerev; 28.03.2018
comment
Нужно ли мне регистрировать MyApplication? - person YerivanLazerev; 28.03.2018
comment
Откуда импортируются ContainerRequestFilter и ContainerResponseFilter? - person cassiomolin; 28.03.2018
comment
com.sun.jersey.spi.container - person YerivanLazerev; 28.03.2018