Проблема компиляции JSP из-за проверки JSTL при добавлении jsp для запуска встроенного экземпляра Jetty - PullRequest
1 голос
/ 17 февраля 2012

Я создал среду тестирования JSP, но столкнулся с этой проблемой, если попытался добавить jsp на работающий сервер.Конфигурация проекта выглядит следующим образом:

  1. JSP присутствует в папке / webapps.
  2. Я создаю ServletHolder для отправки в этот JSP и добавляю сервлет в webcontext.
  3. Я настраиваю встроенный сервер Jetty с этим веб-текстом и запускаю сервер.
  4. Страница jsp в порядке.

Теперь я создаю еще один ServletHolder для другой JSP идобавьте его в веб-текст запущенного сервера.При доступе к странице я получаю следующее исключение

java.lang.NullPointerException
at org.apache.taglibs.standard.tlv.JstlBaseTLV.validate(JstlBaseTLV.java:149)
at org.apache.taglibs.standard.tlv.JstlCoreTLV.validate(JstlCoreTLV.java:105)
at org.apache.jasper.compiler.TagLibraryInfoImpl.validate(TagLibraryInfoImpl.java:949)
at org.apache.jasper.compiler.Validator.validateXmlView(Validator.java:1921)
at org.apache.jasper.compiler.Validator.validate(Validator.java:1888)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:223)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
at org.apache.jasper.servlet.JspServletWrapper.loadTagFile(JspServletWrapper.java:280)
at org.apache.jasper.compiler.TagFileProcessor.loadTagFile(TagFileProcessor.java:660)
at org.apache.jasper.compiler.TagFileProcessor.access$000(TagFileProcessor.java:91)
at  org.apache.jasper.compiler.TagFileProcessor$TagFileLoaderVisitor.visit(TagFileProcessor.java:719)

org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:634)

Странно, если я остановлю веб-текст, добавлю сервлет и снова запущу веб-текст, все будет нормально.

Я попытался отладить это и обнаружил, что для второго вызова jsp / tag для JstlCoreTLV.getInitParameters () возвращается ноль, возможно, jstl повторно использует объект проверки из предыдущего кэша, и это свойство сбрасывается в нульмежду.

Кто-нибудь сталкивался с этой проблемой?это будет ошибка в библиотеке JSTL?

1 Ответ

1 голос
/ 21 февраля 2012

Вот обходной путь, который я использовал для исправления этой проблемы - повторно инициализировал сервлет JSP по умолчанию, чтобы сделать недействительным свой кеш taglib

    ServletHolder jspServletHolder = webContext.getServletHandler()
                .getServlet("jsp");
Servlet jspServlet = jspServletHolder.getServlet();
ServletConfig jspServletConfig = jspServlet.getServletConfig();
jspServlet.destroy();
jspServlet.init(jspServletConfig);
...