2013-04-30 2 views
1

Я использую Jersey 1.17 и Jersey-Spring 1.8.Jersey ResourceFilter и весна

Я пытаюсь установить джерси ResourceFilter для правильной установки. Я хочу, чтобы этот фильтр был прикладной.

Я определил реализацию ResourceFilter как фасоль весной (определенную в XML) и аннотировал ее аннотацией @Provider.

@Provider 
public class ContainerResourceFilterTest implements ResourceFilter 
{ 
    public ContainerRequestFilter getRequestFilter() 
    { 
     return null; //TODO 
    } 

    public ContainerResponseFilter getResponseFilter() 
    { 
     return null; //TODO 
    } 
} 

Но он не получает удар, когда я отправить запрос в.

Если я использую @ResourceFilters аннотацию на конкретный ресурс, то он работает, как ожидалось, но я не хочу, чтобы сделать это на каждом отдельном классе.

Как зарегистрировать фильтр с широким спектром применения?

ответ

0

Отвечая на мои вопросы.

Выполнение дальнейшего чтения исходного кода Джерси. Я обнаружил, что аннотация @Provider не делает ничего для ResourceFilterFactory или ContainerRequest/Response. Они могут быть зарегистрированы только в одном из следующих 2 способов

  • Использование META-INF/услуги
  • Использование инициализации Params из сервлета, например в web.xml

    <init-param> 
        <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name> 
        <param-value>com.my.path.ResourceFilterFactory</param-value> 
    </init-param> 
    

Не знаете, почему код не проверяет зарегистрированные весенние бобы для @Providers, которые реализуют соответствующие интерфейсы.

Стоит отметить, что регистрация класса, который реализует ResourceFilter, не работает ни для одного из вышеуказанных методов. Вы должны сделать это для ResourceFilterFactory и получите это обратно ResourceFilter.

Хорошая новость заключается в том, что вы сделали майку осведомленной о классах , которые необходимо зарегистрировать, чтобы они звонили в весну, чтобы обеспечить эти классы, поэтому автоматическая проводка и т. Д. Работает в обычном режиме.

0

Джерси не сканирует путь к классам для всех - ResourceFilters - одна из вещей, которые он не найдет автоматически. Если вы используете ResourceConfig класс, зарегистрировать свой ResourceFilter класса:

@ApplicationPath("/myapp") 
public class MyApplication extends ResourceConfig { 
    public MyApplication() { 
     packages(getClass().getPackage().toString()); 
     register(ContainerResourceFilterTest.class); 
    } 
} 

Джерси будет сканировать этот класс для интерфейса фильтра, создать экземпляр (все фильтры одноточечно сфера в соответствии с их документами) и вставить его в Джерси.

Смежные вопросы