Bug 56613 - JSP COMPILATION ERROR ON TOMCAT 6 & 7 with JDK VERSION 1.8.0_20-ea
Summary: JSP COMPILATION ERROR ON TOMCAT 6 & 7 with JDK VERSION 1.8.0_20-ea
Status: RESOLVED DUPLICATE of bug 56283
Alias: None
Product: Tomcat 7
Classification: Unclassified
Component: Jasper (show other bugs)
Version: unspecified
Hardware: PC All
: P2 normal (vote)
Target Milestone: ---
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-06-12 02:47 UTC by frank
Modified: 2014-06-12 09:33 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description frank 2014-06-12 02:47:27 UTC
With Java 1.8.0_20-ea (http://jre.us.oracle.com/java/re/jdk/8u20/promoted/all/b15/bundles/windows-i586/jdk-8u20-ea-windows-i586.exe), we got a JSP compilation error as below.

Tomcat 6 & 7 both have compilation error when trying to interpret the following code in JSP: 
     str = str.replace("'", @ "\\'").replace("\"","\\\""); 
(str is a string here)
 . 
 Below is the error message: 
  SEVERE: Compilation error 
 org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException 
         at 
 org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileRea 
 der.java:342) 
         at 
 org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:206) 
         at 
 org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:163) 
         at 
 org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEn 
 vironment.java:96) 
         at 
 org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(Un 
 resolvedReferenceBinding.java:49) 
         at 
 org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryT 
 ypeBinding.java:131) 
         at 
 org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveTypesFor(Bin 
 aryTypeBinding.java:903) 
         at 
 org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.getExactMethod(Bina 
 ryTypeBinding.java:705) 
         at 
 org.eclipse.jdt.internal.compiler.lookup.Scope.findExactMethod(Scope.java:763) 
 . 
         at 
 org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2057) 
         at 
 org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java 
 :417) 
         at 
 org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java 
 :334) 
         at 
 org.eclipse.jdt.internal.compiler.ast.Assignment.resolveType(Assignment.java:1 
 84) 
         at 
 org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:906) 
         at 
 org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:101) 
         at 
 org.eclipse.jdt.internal.compiler.ast.IfStatement.resolve(IfStatement.java:233 
 ) 
         at 
 org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:101) 
         at 
 org.eclipse.jdt.internal.compiler.ast.IfStatement.resolve(IfStatement.java:233 
 ) 
         at 
 org.eclipse.jdt.internal.compiler.ast.Block.resolveUsing(Block.java:115) 
         at 
 org.eclipse.jdt.internal.compiler.ast.TryStatement.resolve(TryStatement.java:7 
 99) 
         at 
 org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStateme 
 nts(AbstractMethodDeclaration.java:429) 
         at 
 org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(Meth 
 odDeclaration.java:196) 
         at 
 org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(Abstra 
 ctMethodDeclaration.java:400) 
         at 
 org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration. 
 java:1085) 
         at 
 org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration. 
 java:1164) 
         at 
 org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(Compi 
 lationUnitDeclaration.java:366) 
         at 
 org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:623) 
         at 
 org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392) 
         at 
 org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:429) 
         at org.apache.jasper.compiler.Compiler.compile(Compiler.java:349) 
         at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327) 
         at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314) 
         at 
 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592 
 ) 
         at 
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326 
 ) 
         at 
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
         at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFi 
 lterChain.java:290) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChai 
 n.java:206) 
         at 
 com.demantra.common.servlets.ServerStartupFilter.doFilter(ServerStartupFilter. 
 java:52) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFi 
 lterChain.java:235) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChai 
 n.java:206) 
         at 
 com.demantra.common.utils.ParamEncodingFilter.doFilter(ParamEncodingFilter.jav 
 a:29) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFi 
 lterChain.java:235) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChai 
 n.java:206) 
         at 
 com.demantra.security.server.csrf.CSRFFilter.doFilter(CSRFFilter.java:138) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFi 
 lterChain.java:235) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChai 
 n.java:206) 
         at 
 com.demantra.security.server.authorization.AuthorizationFilter.doFilter(Author 
 izationFilter.java:115) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFi 
 lterChain.java:235) 
         at 
 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChai 
 n.java:206) 
         at 
 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java 
 :233) 
         at 
 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java 
 :191) 
         at 
 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.j 
 ava:470) 
         at 
 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
         at 
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
         at 
 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:1 
 09) 
         at 
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
         at 
 org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:86 
 4) 
         at 
 org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Htt 
 p11AprProtocol.java:579) 
         at 
 org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) 
         at java.lang.Thread.run(Unknown Source) 
   
   

 From this page (http://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html), we know that Tomcat6 is using Eclipse JDT Java compiler for the JSP 
 compilation. 
 . 
 Please note: 
 This JSP file can compile successfully with Java 7, and also JDK8u5. We got this error only on Java 1.8.0_20-ea
Comment 1 Konstantin Kolinko 2014-06-12 09:33:19 UTC
First, you are missing required information: you are not mentioning what exact x.y.z. version of Tomcat you are using.


Second, for Java 8 you have to use a version of Eclipse ECJ compiler that supports Java 8. See [1].

The "ClassFormatException" probably means that your version of ECJ does not know about Java 8 at all.



Note that
1. We cannot update the version of ECJ included with Tomcat 6, as Tomcat 6 must be able to run on Java 1.5, but current ECJ releases require minimum of Java 6.

2. There are known issues - see bug 56543

3. You may replace ecj-*.jar with a later version that you may download from http://www.eclipse.org/

See archives of Tomcat Users mailing list, and ask on the mailing list if you have questions. (Bugzilla is not a support forum).

4. Tomcat can be configured to use Java javac compiler instead of Eclipse ECJ. [2]


[1] http://www.eclipse.org/downloads/index-java8.php
[2] http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html

*** This bug has been marked as a duplicate of bug 56283 ***