GAE / J: невозможно зарегистрировать пользовательский ELResolver - PullRequest
2 голосов
/ 31 марта 2010

Мне нужно зарегистрировать пользовательский ELResolver для проекта Google App Engine.

Поскольку он должен быть зарегистрирован до получения любого запроса, , как указано в Javadoc :

Регистрация ELResolver незаконна после того, как приложение получил любой запрос от клиента. Если сделана попытка зарегистрироваться ELResolver по истечении этого времени создается исключение IllegalStateException.

Я использую ServletContextListener:

public class RegisterCustomELResolver implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
        ServletContext context = sce.getServletContext(); 
        JspApplicationContext jspContext = 
            JspFactory.getDefaultFactory().getJspApplicationContext(context); 
        jspContext.addELResolver(new MyELResolver()); 
    } 

    ... 
}

Проблема в том, что JspFactory.getDefaultFactory() всегда возвращает ноль. Я уже заполнил отчет об ошибке. Есть идеи для обхода?

1 Ответ

4 голосов
/ 31 марта 2010

Я не уверен, какой сервлет-контейнер GAE использует «под капотами» (Jetty? Tomcat?), Но это можно распознать как ошибка в Tomcat 6.x. Обходной путь - принудительно загрузить JspRuntimeContext до получения фабрики:

Class.forName("org.apache.jasper.compiler.JspRuntimeContext");

Посмотрите, поможет ли этот или подобный хак.

...