[ https://issues.apache.org/jira/browse/SLING-6458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15822818#comment-15822818 ]
Oliver Lietz commented on SLING-6458: ------------------------------------- {noformat} java.lang.VerifyError: Bad type on operand stack Exception Details: Location: org/apache/sling/scripting/jsp/jasper/runtime/JspApplicationContextImpl.createELResolver()Ljavax/el/ELResolver; @28: invokevirtual Reason: Type 'javax/servlet/jsp/el/ImplicitObjectELResolver' (current frame, stack[1]) is not assignable to 'javax/el/ELResolver' Current Frame: bci: @28 flags: { } locals: { 'org/apache/sling/scripting/jsp/jasper/runtime/JspApplicationContextImpl', 'javax/el/CompositeELResolver' } stack: { 'javax/el/CompositeELResolver', 'javax/servlet/jsp/el/ImplicitObjectELResolver' } Bytecode: 0x0000000: 2a04 b500 062a b400 1dc7 0080 bb00 1e59 0x0000010: b700 1f4c 2bbb 0020 59b7 0021 b600 222a 0x0000020: b400 05b9 0023 0100 4d2c b900 2401 0099 0x0000030: 0013 2b2c b900 2501 00c0 0026 b600 22a7 0x0000040: ffea 2bbb 0027 59b7 0028 b600 222b bb00 0x0000050: 2959 b700 2ab6 0022 2bbb 002b 59b7 002c 0x0000060: b600 222b bb00 2d59 b700 2eb6 0022 2bbb 0x0000070: 002f 59b7 0030 b600 222b bb00 3159 b700 0x0000080: 32b6 0022 2a2b b500 1d2a b400 1db0 Stackmap Table: append_frame(@41,Object[#112],Object[#113]) chop_frame(@66,1) chop_frame(@137,1) at org.apache.sling.scripting.jsp.jasper.runtime.JspFactoryImpl.getJspApplicationContext(JspFactoryImpl.java:150) at org.apache.sling.scripting.jsp.jasper.compiler.JspRuntimeContext$JspFactoryHandler.getJspApplicationContext(JspRuntimeContext.java:123) at org.apache.jsp.apps.nt.unstructured.html_jsp._jspInit(html_jsp.java:22) at org.apache.sling.scripting.jsp.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.loadServlet(JspServletWrapper.java:191) at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.prepareServlet(JspServletWrapper.java:434) at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:486) at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:449) at org.apache.sling.scripting.jsp.JspScriptEngineFactory.callJsp(JspScriptEngineFactory.java:346) at org.apache.sling.scripting.jsp.JspScriptEngineFactory.access$100(JspScriptEngineFactory.java:101) at org.apache.sling.scripting.jsp.JspScriptEngineFactory$JspScriptEngine.eval(JspScriptEngineFactory.java:607) at org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:388) at org.apache.sling.scripting.core.impl.DefaultSlingScript.eval(DefaultSlingScript.java:184) at org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:491) at org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552) at org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44) at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:77) at org.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProcessorImpl.java:282) at org.apache.sling.engine.impl.filter.RequestSlingFilterChain.render(RequestSlingFilterChain.java:49) at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:71) at org.apache.sling.launchpad.testservices.filters.TestFilter.doFilter(TestFilter.java:47) at org.apache.sling.launchpad.testservices.filters.NoPropertyFilter.doFilter(NoPropertyFilter.java:25) at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) at org.apache.sling.launchpad.testservices.filters.TestFilter.doFilter(TestFilter.java:47) at org.apache.sling.launchpad.testservices.filters.SlingFilter.doFilter(SlingFilter.java:25) at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) at org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter.doFilter(RequestProgressTrackerLogFilter.java:107) at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) at org.apache.sling.engine.impl.SlingRequestProcessorImpl.doProcessRequest(SlingRequestProcessorImpl.java:151) at org.apache.sling.engine.impl.SlingMainServlet.service(SlingMainServlet.java:219) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:837) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772) at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:193) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582) at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:70) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:284) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) at org.eclipse.jetty.server.Server.handle(Server.java:534) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110) at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) at java.lang.Thread.run(Thread.java:745) {noformat} > JSP scripting does not support Java 8 features (lambdas, method references, > etc) > -------------------------------------------------------------------------------- > > Key: SLING-6458 > URL: https://issues.apache.org/jira/browse/SLING-6458 > Project: Sling > Issue Type: Bug > Components: Scripting > Affects Versions: Scripting JSP 2.0.28, Scripting JSP 2.1.0, Scripting JSP > 2.1.4, Scripting JSP 2.1.6, Scripting JSP 2.1.8, Scripting JSP 2.2.0, > Scripting JSP 2.2.2, Scripting JSP 2.2.4, Scripting JSP 2.2.6 > Reporter: Henry Kuijpers > > When trying to use Java 8 functionality in a JSP file, the Jasper framework > in the Sling Scripting bundle fails to compile the JSP file. It seems to get > stuck on a Java 8 feature: Lambdas. > {code} > <%@page session="false" %> > <%@ page import="java.util.stream.IntStream" %> > <%@ page import="java.io.IOException" %> > <% > out.println("Lambda test"); > IntStream leip = IntStream.of(1, 2, 3, 4, 5, 6); > final JspWriter out2 = out; > leip.forEach(x -> { > try { > out2.println(x); > } catch (IOException e) { > // Intentionally do nothing > } > }); > %> > {code} > When we remove the complete "leip.forEach" statement, the code compiles and > executes successfully. > Upon further investigation, I found out that the Jasper compiler that is > being used, does not have support for "tag 18", which seems to be the lambda > feature in Java 8. > I could find the constant pool tags over here: > https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4-140 > Clearly, there is no support for MethodHandle, MethodType, InvokeDynamic. > I could find a bug report for Tomcat (where Jasper is developed) over here: > https://bz.apache.org/bugzilla/show_bug.cgi?id=54475 > It seems that the issue was fixed in a newer version of Jasper, namely > 6.0.40. We are currently using 6.0.14 (which is in Apache Sling Scripting JSP > version bundle version 2.1.4). > I tried looking at > https://mvnrepository.com/artifact/org.apache.sling/org.apache.sling.scripting.jsp > but for some reason all newer versions are also embedding Jasper 6.0.14 > (which does not support Java 8) and in the custom code inside that bundle I > also do not see any cases for 18 in the switch statement in > SmapUtil$SDEInstaller.copyConstantPool. Nor do I see any traces that look > like this fix: > https://bz.apache.org/bugzilla/attachment.cgi?id=31416&action=diff > See below a stacktrace of what's happening: > {code} > 12.01.2017 14:39:19.063 *ERROR* [144.119.190.210 [1484228359038] POST > /content/page/sign-up.html HTTP/1.1] > org.apache.sling.servlets.get.impl.DefaultGetServlet No renderer for > extension html, cannot render resource ResourceWrapper, > type=test/components/form/actions/register, > path=/content/page/sign-up/jcr:content/par/start, resource=[JcrNodeResource, > type=foundation/components/form/start, superType=null, > path=/content/page/sign-up/jcr:content/par/start] > 12.01.2017 14:39:19.079 *ERROR* [144.119.190.210 [1484228359038] POST > /content/page/sign-up.html HTTP/1.1] com.day.cq.wcm.tags.IncludeTag Error > while executing script > /apps/test/components/form/actions/register/post.POST.jsp > org.apache.sling.api.scripting.ScriptEvaluationException: > org.apache.sling.scripting.jsp.jasper.JasperException: Unable to compile > class for JSP > at > org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:388) > at > org.apache.sling.scripting.core.impl.DefaultSlingScript.eval(DefaultSlingScript.java:171) > at > org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:463) > at com.day.cq.wcm.tags.IncludeTag.includeScript(IncludeTag.java:167) > at com.day.cq.wcm.tags.IncludeTag.doEndTag(IncludeTag.java:87) > at > org.apache.sling.scripting.jsp.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:502) > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:449) > at > org.apache.sling.scripting.jsp.JspScriptEngineFactory.callJsp(JspScriptEngineFactory.java:281) > at > org.apache.sling.scripting.jsp.JspScriptEngineFactory.access$100(JspScriptEngineFactory.java:102) > at > org.apache.sling.scripting.jsp.JspScriptEngineFactory$JspScriptEngine.eval(JspScriptEngineFactory.java:524) > at > org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:361) > at > org.apache.sling.scripting.core.impl.DefaultSlingScript.eval(DefaultSlingScript.java:171) > at > org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:463) > at > org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:508) > at > org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:45) > ... filters ommitted for brevity ... > at > com.day.j2ee.servletengine.RequestDispatcherImpl.doFilter(RequestDispatcherImpl.java:321) > at > com.day.j2ee.servletengine.RequestDispatcherImpl.service(RequestDispatcherImpl.java:340) > at > com.day.j2ee.servletengine.RequestDispatcherImpl.service(RequestDispatcherImpl.java:383) > at > com.day.j2ee.servletengine.ServletHandlerImpl.process(ServletHandlerImpl.java:335) > at > com.day.j2ee.servletengine.HttpListener$Worker.run(HttpListener.java:644) > at java.lang.Thread.run(Thread.java:745) > Caused by: org.apache.sling.api.SlingException: > org.apache.sling.scripting.jsp.jasper.JasperException: Unable to compile > class for JSP > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.handleJspExceptionInternal(JspServletWrapper.java:691) > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:608) > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:525) > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:449) > at > org.apache.sling.scripting.jsp.JspScriptEngineFactory.callJsp(JspScriptEngineFactory.java:281) > at > org.apache.sling.scripting.jsp.JspScriptEngineFactory.access$100(JspScriptEngineFactory.java:102) > at > org.apache.sling.scripting.jsp.JspScriptEngineFactory$JspScriptEngine.eval(JspScriptEngineFactory.java:524) > at > org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:361) > ... 121 more > Caused by: java.io.IOException: unexpected tag: 18 > at > org.apache.sling.scripting.jsp.jasper.compiler.SmapUtil$SDEInstaller.copyConstantPool(SmapUtil.java:491) > at > org.apache.sling.scripting.jsp.jasper.compiler.SmapUtil$SDEInstaller.addSDE(SmapUtil.java:308) > at > org.apache.sling.scripting.jsp.jasper.compiler.SmapUtil$SDEInstaller.<init>(SmapUtil.java:264) > at > org.apache.sling.scripting.jsp.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:243) > at > org.apache.sling.scripting.jsp.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:167) > at > org.apache.sling.scripting.jsp.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:151) > at > org.apache.sling.scripting.jsp.jasper.compiler.Compiler.compile(Compiler.java:312) > at > org.apache.sling.scripting.jsp.jasper.compiler.Compiler.compile(Compiler.java:290) > at > org.apache.sling.scripting.jsp.jasper.compiler.Compiler.compile(Compiler.java:277) > at > org.apache.sling.scripting.jsp.jasper.JspCompilationContext.compile(JspCompilationContext.java:501) > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.prepareServlet(JspServletWrapper.java:427) > at > org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:486) > ... 126 more > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)