I'm actually using Tomcat 5.5.15, but I could't select it in the list. But I've also got this problem with 5.5.12. I've got the following awfully simple JSP: --------------------------------------------- <%@ page import="java.util.Arrays,java.util.Comparator" %> <% MyClass[] list = new MyClass[2]; list[0] = new MyClass(); list[1] = new MyClass(); Arrays.sort(list,new Comparator<MyClass>() { public int compare(MyClass mo1, MyClass mo2) { return -1; // whatever } }); %> <%! public class MyClass { String text = "blah"; public String getText() { return text; } } %> --------------------------------------------- It compiles fine, but when executed it crashes like this: java.lang.AbstractMethodError: org.apache.jsp.error_jsp$1.compare (Ljava/lang/Object;Ljava/lang/Object;)I at java.util.Arrays.mergeSort(Arrays.java:1284) at java.util.Arrays.sort(Arrays.java:1223) at org.apache.jsp.error_jsp._jspService(org.apache.jsp.error_jsp:64) ...more... At first I thought it's a JDK error, but when I replace Tomcat's jasper- compiler-jdt.jar by an Ant-compiler jar, the code runs fine !! The above code also runs fine when I replace "MyClass" by "Object" in the Comparator definition, but this is ofcourse not what Java 5 is about :-) I've already updated to Suns JDK 1.5.0_06, but that didn't change anything. Any clues? Tanx!
Have you set the correct jspServlet compiler init parameter for jdt java 5 support? conf/web.xml <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>compilerSourceVM</param-name> <param-value>1.5</param-value> </init-param> <init-param> <param-name>compilerTargetVM</param-name> <param-value>1.5</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>
Yep, my other JSPs are filled with Java 5 specific stuff and compile/run fine. But, just to be sure I checked the web.xml anyway: it's indeed correctly set to sourceVM and targetVM 1.5
Strange, but it seams like a real JDT 3.1 bug. Please report this to the JDT eclipse community. Thanx Peter
See https://bugs.eclipse.org/bugs/show_bug.cgi?id=125254 for explanation about this problem.
Great, I have commit the patch from Olivier. Many thanks for your help to fix it Peter
No problem. We might consider adding some validation in the Compiler constructor to prevent such cases. If you would get an exception or an error immediately before the compilation, this would never happen. We were in a case where the compilation looks good, but because the bridge method was not generated at runtime an AbstractMethodError is thrown. This is not good. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=125340 for this enhancement request against JDT/Core component.
(Just a resolution conclusion comment.) RESOLUTION: This problem is fixed in Tomcat 5.5.16. Tomcat 5.5.16 changelog: ( http://tomcat.apache.org/tomcat-5.5-doc/changelog.html ) "Jasper: 38389: Set correct JDT Compiler option to java 1.5 compliance. Patch from Olivier Thomann and Paul Hamer (pero)" http://issues.apache.org/bugzilla/show_bug.cgi?id=38389