I am working on porting a website from Java 6 running on Weblogic 11g (10.3.5) to Java 8 using Weblogic 12c (12.1.3). I found several problems (this helps others who have tried it before on my team, without enough success), but one seems insurmountable, and I can’t find out anything about it.
One of our JSPs doesn’t load in the browser weblogic.servlet.jsp.CompilationException, complaining that "The _jspService method code (HttpServletRequest, HttpServletResponse) exceeds the limit of 65535 bytes." Examining the differences between the generated file .javafor JSP in two versions of Weblogic, I see that each JSP expression is wrapped in an ExpressionInterceptor.
For example, in WebLogic 10 with the launch of Java 6 <%=user.getLanguage()%>becomes out.print(user.getLanguage());. In WebLogic 12, running on Java 8, it becomes:
out.print(_jsp_expressionInterceptor.intercept(
String.valueOf(user.getLanguage()), pageContext,
weblogic.servlet.jsp.ExpressionInterceptor.Type.Scripting));
It seems to me that extra method calls - 2 method calls, about 250 times in the file - are enough to bring the method _jspServiceabove the 64K limit. (The method size in Java 6, based on the output from javap, is 62912 bytes, so it makes sense.)
My question is: is there a way to keep Weblogic from generating calls on ExpressionInterceptor?
Thank.
source
share