Как исправить ошибку Код метода _jspService (HttpServletRequest, HttpServletResponse) превышает ограничение 65535 байт Jboss - PullRequest
0 голосов
/ 18 октября 2019

У меня возникла ошибка в строке: 384 в сгенерированном Java-файле. Код метода

_jspService (HttpServletRequest, HttpServletResponse)

превышает 65535ограничение в байтах.

Я пробовал несколько решений по сети, и проблема все еще сохраняется.

Я использую Jboss-5.1.0 GA в качестве сервера.

Воттрассировка стека ошибки.

An error occurred at line: 384 in the generated java file
The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

    Stacktrace:
            at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
            at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
            at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:335)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:313)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:300)
            at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:312)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638)
            at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:543)
            at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:480)
            at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:307)
            at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:115)
            at com.liferay.portal.struts.PortletRequestProcessor.doInclude(PortletRequestProcessor.java:284)
            at com.liferay.portal.struts.PortletRequestProcessor.doForward(PortletRequestProcessor.java:255)

1 Ответ

1 голос
/ 18 октября 2019

Ваш JSP слишком большой / слишком сложный. Вам необходимо провести рефакторинг

Мы пытались выполнить рефакторинг, но он не работает, есть ли альтернативные решения?

Нет.

Проблема в том, что существуетжесткое ограничение, накладываемое спецификацией виртуальной машины Java на количество байтов байт-кода в скомпилированном методе Java. (В частности, формат файла классов использует 16-битное число в качестве сторон массива кода метода.)

Компиляторы Java не могут автоматически разбивать метод, который слишком велик, на суб-методы. Вы должны сделать это самостоятельно на уровне исходного кода.

В JSP-компилятор JSP преобразует каждый JSP-класс в класс с помощью одного (большого) метода Java, если только вы не можете реорганизовать его, переместив часть логикив отдельные методы, классы или ... JSP с использованием "динамического включения";см https://stackoverflow.com/a/5484509/139985.)

...