我正在将网站从运行Weblogic 11g(10.3.5)的Java 6迁移到运行Weblogic 12c(12.1.3)的Java 8。我发现了几个问题(这有助于我团队中的其他人以前尝试过,但没有获得足够的成功),但是似乎无法克服,我对此一无所获。

我们的一个JSP未能使用weblogic.servlet.jsp.CompilationException加载到浏览器中,并提示“方法_jspService(HttpServletRequest,HttpServletResponse)的代码超出了65535个字节的限制。”检查两个版本的Weblogic中为JSP生成的.java文件之间的差异,我看到每个JSP表达式都包装在ExpressionInterceptor中。

例如,在运行Java 6的WebLogic 10中,<%=user.getLanguage()%>变为out.print(user.getLanguage());。在运行Java 8的WebLogic 12中,它变为:

out.print(_jsp_expressionInterceptor.intercept(
    String.valueOf(user.getLanguage()), pageContext,
    weblogic.servlet.jsp.ExpressionInterceptor.Type.Scripting));

在我看来,多余的方法调用-2个方法调用,在文件中约250次-足以使_jspService方法超过64K限制。 (基于javap的输出,Java 6中的方法大小为62912字节,因此很有意义。)

我的问题是:有什么方法可以阻止Weblogic生成对ExpressionInterceptor的调用?

谢谢。

最佳答案

这是一个已知问题,具有针对12.1.3和12.1.2的补丁程序
错误17968606

09-10 02:59
查看更多