Потенциальная ошибка регрессии: Grails 2.4.0 -> 2.4.2 с использованием PostConstruct в контроллере

#grails

#grails

Вопрос:

У меня есть несколько контроллеров и служб, которые извлекают значения из grailsApplication, используя аннотацию PostConstruct. Все это работало нормально в 2.4.0 и раньше, но внезапно после обновления до 2.4.2 я теперь получаю ошибку при запуске:

Сообщение: ошибка при создании компонента с именем ‘com.domain.AuthenticationController’: не удалось вызвать метод инициализации; вложенное исключение — java.lang.Исключение IllegalStateException: запрос, связанный с потоком, не найден: вы ссылаетесь на атрибуты запроса вне фактического веб-запроса или обрабатываете запрос вне первоначально принимающего потока? Если вы на самом деле работаете с веб-запросом и все еще получаете это сообщение, ваш код, вероятно, выполняется за пределами DispatcherServlet / DispatcherPortlet: в этом случае используйте RequestContextListener или RequestContextFilter, чтобы предоставить текущий запрос.

Рассматриваемый метод инициализации:

 @PostConstruct
def init() {
    tokenValidity = grailsApplication.config.user.accessToken.validity
}
 

Как вы можете видеть, я вообще не использую и не ссылаюсь на объект запроса в методе init. Похоже, это связано с моим использованием конфигурации.

Буду признателен за любую помощь.

Ответ №1:

Похоже, в вашем приложении не установлен плагин webxml. Пожалуйста, дважды проверьте это.

Комментарии:

1. Вы правы, но зачем мне нужен плагин webxml и почему он будет работать до версии 2.4.2 без плагина webxml?

2. Я не уверен в проблеме, но ответ заключается в том, что этот плагин определяет определенный порядок фильтров в сгенерированном web.xml досье. Это необходимо только в том случае, если фильтры вашего любого плагина должны находиться в определенном положении относительно фильтров, добавленных Grails или другими плагинами.