Почему resteasy.providers по-прежнему требуется при использовании Spring с аннотациями @Provider?

У меня есть приложение Resteasy, которое использует Spring и содержит ContainerRequestFilter а также ContainerResponseFilter реализации, отмеченные @Provider, Приложение использует версию 3.0-beta-6 Рестаси.

Эти фильтры работают должным образом, когда они добавляются в resteasy.providers Параметр context в web.xml выглядит так:

<context-param>
      <param-name>resteasy.providers</param-name>
      <param-value>foo.filter.LoggingRequestFilter,
                   foo.filter.LoggingResponseFilter</paramvalue>
</context-param> 

Если я уберу отсюда фильтры, они больше не будут называться.

Я предполагал, что эти провайдеры будут автоматически регистрироваться в Resteasy при использовании org.jboss.resteasy.plugins.spring.SpringContextLoaderListener, Странно для меня то, что это работает на PreProcessInterceptor реализации в предыдущих версиях Resteasy, и все еще работает в v3, но Filters и ExceptionMappers не регистрируются автоматически.

Вопросы

  1. Почему resteasy.providers параметр контекста необходим, если классы помечены @Provider а отсканирован весной?
  2. Есть ли программный способ установить этих провайдеров во время выполнения?

1 ответ

Решение

Для того, чтобы провайдеры отсканировали Spring, мне пришлось добавить includeFilters параметр для @ComponentScan в моем классе конфигурации Java Spring.

@ComponentScan(value = "com.foo", 
               includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))

Вы также можете просто комментировать их @Component вместе с @Provider и Spring удостоверится, что они будут обнаружены Resteasy при использовании Resteasy SpringContextLoaderListener,

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