Bug 1080026 - JDK8 JasperException: Unable to compile class for JSP. java.util.Map$Entry cannot be resolved
Summary: JDK8 JasperException: Unable to compile class for JSP. java.util.Map$Entry ca...
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Enterprise Application Platform 6
Classification: JBoss
Component: Web
Version: 6.3.0
Hardware: x86_64
OS: Linux
unspecified
high
Target Milestone: ER10
: EAP 6.3.0
Assignee: Rémy Maucherat
QA Contact: Radim Hatlapatka
Russell Dickenson
URL:
Whiteboard:
Depends On:
Blocks: java8 1224883
TreeView+ depends on / blocked
 
Reported: 2014-03-24 14:32 UTC by Emil Cervenan
Modified: 2015-05-26 11:15 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2014-08-04 10:13:30 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)
project build (5.48 MB, application/zip)
2014-03-24 14:37 UTC, Emil Cervenan
no flags Details

Description Emil Cervenan 2014-03-24 14:32:42 UTC
Description of problem:
Exception is thrown when accessing JSP page with java.util.HashMap reference. This issue is related to JDK 8. HashMap implementation has changed and looks like jasper works with HashMap$Entry subclass which is not pressent in JDK 8 HashMap anymore. 


Version-Release number of selected component (if applicable):
Java(TM) SE Runtime Environment (build 1.8.0-b132)
EAP 6.3.0.DR5

How reproducible:
Always

Steps to Reproduce:
1. Use java.util.HashMap in JSP file or reference it with some import
2. Build project with JDK 8
3. Deploy on EAP 6.3.0.DR5
4. Access JSP page

JSP example: (StatusReport.executedJobs is referenced HashMap)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="springtest.init.StatusReport,java.lang.Integer" %>
<html>
  <head><title>Scheduled Job Report Page</title></head>
  <body>

    Number of milliseconds from application webcontainer deployment:
    <ul><li>
        <% out.println(StatusReport.getMillsFromStart()); %>
    </li></ul>
    
    <table border="1">
        <thead>
            <tr><th>Job Name</th><th>Number of jobs executed</th></tr>
        </thead>
        <%
            for (String key : StatusReport.executedJobs.keySet()) {
                Integer value = (Integer)StatusReport.executedJobs.get(key);
        %>
            <tr>
                <td class="key" id="<%= key %>">
                    <%= key %>
                </td>
                <td class="value" id="<%= key %>-value">
                    <%= value %>
                </td>
            </tr>
        <%
            }
        %>
    </table>
  </body>
</html>

Status report class:

package springtest.init;

import java.util.HashMap;
import java.util.Map;
import java.util.Date;

public class StatusReport
{
   public static final Map<String, Integer> executedJobs = new HashMap<String, Integer>();
   public static final Date startDate = new Date();

   /**
    * This method os not thread safe. We assume that there will not be only more job
    * of the same name trying to update the count at the same time. 
    * @param jobName
    */
   public static void increaseJobCount(String jobName)
   {
      int cnt = 1;
      if (executedJobs.containsKey(jobName))
      {
         cnt += executedJobs.get(jobName);
      }
      executedJobs.put(jobName, cnt);
   }

   public static long getMillsFromStart()
   {
      return new Date().getTime() - startDate.getTime();
   }
}


Actual results:

15:12:22,893 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/quartz1-scheduling].[jsp]] (http-/127.0.0.1:8080-13) JBWEB000236: Servlet.service() for servlet jsp threw exception: org.apache.jasper.JasperException: JBWEB004062: Unable to compile class for JSP: 

JBWEB004061: An error occurred at line: 1 in the generated java file
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files

JBWEB004211: Stacktrace:
	at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:69) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:361) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:339) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:326) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:606) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:308) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:309) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:242) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-1.jar:1.0.2.Final-redhat-1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.4.0.Final-redhat-5.jar:7.4.0.Final-redhat-5]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:353) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:911) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at org.apache.tomcat.util.net.NioEndpoint$ChannelProcessor.run(NioEndpoint.java:920) [jbossweb-7.4.0.Beta4.jar:7.4.0.Beta4]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0]
	at java.lang.Thread.run(Thread.java:744) [rt.jar:1.8.0]

Comment 1 Emil Cervenan 2014-03-24 14:37:10 UTC
Created attachment 878086 [details]
project build

Comment 2 Emil Cervenan 2014-03-25 09:55:18 UTC
Workaround is to use latest ECJ module (ecj-4.3.1.jar) instead of ecj-3.7.2-redhat-1.jar.

Comment 3 Rémy Maucherat 2014-06-03 12:47:53 UTC
Java 8 JSP compilation will need 4.4 to work well, so updating doesn't really make sense.

Comment 4 Martin Velas 2014-08-04 10:13:30 UTC
This issue reported against older version, cannot be reproduced against latest 6.3.0.ER10 bits, which means it was fixed earlier. Therefore, we are closing this bug. Thank you for reporting this issue.


Note You need to log in before you can comment on or make changes to this bug.