Как изменить стандартные методы Java - PullRequest
1 голос
/ 30 октября 2019

У меня возникли некоторые проблемы с проектом моей компании (возможно, из-за Windows, антивируса или обоих).

Происходит следующая ошибка:

SEVERE: Exception Processing ErrorPage[errorCode=404, location=/404.jsp]
org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to compile class for JSP
        at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:565)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
        at org.apache.jasper.servlet.JspServlet._serviceJspFile(JspServlet.java:386)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:40001)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:472)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
        at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:395)
        at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:254)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.jasper.JasperException: Unable to compile class for JSP
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:610)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368)
        ... 26 more
Caused by: java.io.IOException: classFile.delete() failed
        at org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:204)
        at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:166)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:510)
        at org.apache.jasper.compiler.Compiler.__compile(Compiler.java:379)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:41002)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:351)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:335)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595)
        ... 27 more

Похоже, файлclassFile.delete () пытается удалить, используется.

Мы не можем добавить исключение в антивирус .... .... 1008 *

Я нашел сообщение от 2006 года, в котором говорится "Мой обходной путь былизмените класс SmapUtil. Если переименование завершается неудачно с первой попытки, оно ждет 50 мс, а затем повторяет попытку (повторяет циклы по мере необходимости). Пока что оно всегда работает со второй попытки после задержки 50 мс. "

Мой вопрос такой:где находится этот класс SmapUtil и как редактировать методы удаления (и переименования)?

Я нигде не могу найти эту информацию

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 ноября 2019

Мне удалось «исправить» его, изменив этот метод Tomcat (удалить и переименовать)

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

Итак, я клонировал исходный код из Tomcat's Github, изменил класс и вуаля, теперь он работает.

Этот метод был что-то вроде:

    if ( !classPath.delete(..) )
      throw Exception...

тогда яизменилось на что-то вроде:

    while ( !classPath.delete(..) && count < 10){
      Thread.wait(50);
      count++
    }

    if (count == 10) 
         Throw Exception
0 голосов
/ 31 октября 2019

Убедитесь, что Tomcat и Jasper настроены для работы в рабочей среде.

Чтобы решить вашу конкретную проблему, вы можете установить для опции Jasper suppressSmap значение true или прекомпиляцииваши файлы JSP или оба.

SMAP обеспечивает поддержку JSR-045 для JSR-0;Он создает сопоставления из сгенерированного байт-кода обратно в исходные файлы JSP для помощи в отладке.

См. эту страницу для получения информации о конфигурации Jasper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...