我在tomcat 6.0.32和java 6上运行JSP项目,突然抛出了这个异常
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file com/company/secure/Account
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
java.lang.ClassLoader.defineClass(ClassLoader.java:615)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
java.lang.Class.getConstructor0(Class.java:2699)
java.lang.Class.newInstance0(Class.java:326)
java.lang.Class.newInstance(Class.java:308)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:150)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:338)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
filters.ObjectsCacheFilter.doFilter(ObjectsCacheFilter.java:43)
filters.FilterCach.doFilter(FilterCach.java:81)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:123)
注意Apache Tomcat / 6。0。3。3日志中提供了根本原因的完整堆栈跟踪。 Apache Tomcat / 6.0.32
答案 0 :(得分:1)
问题是由于您的webapp(在本例中为JSP框架)尝试从仅API的JAR文件加载类。
这是问题的另一个例子(尽管可能是针对不同的Java EE API):
说明:某些Java EE API有两种形式:即2个不同的JAR文件:
特定于平台的表单包含所有方法的代码。此JAR通常是Web容器的一部分,默认情况下包含在每个web-apps有效类路径中。
仅限API的表单包含已删除其可执行代码的方法。此JAR由Oracle提供,允许您独立于任何特定的Java EE实现编译Java EE应用程序代码。
问题很可能是您已将其中一个仅限API的JAR放到Web应用程序的运行时类路径中,并且它优先于特定于平台的JAR。
鉴于这已经“突然发生”,我怀疑你一直在为你的项目改变Maven依赖项,并且(不小心)使一个仅API的JAR文件成为运行时依赖项而不是仅编译时依赖项。
解决方案:检查您的webapp的Maven(等)依赖项,或者如果您手动管理依赖项,请检查您放入webapp的WEB-INFO/lib
目录和Web容器的共享库目录中的JAR。