java - 类 ClassFormatError :Absent-Code-attribute-in-method-that-is-not-native

标签 java tomcat

我有一个 JSP 项目在 tomcat 6.0.32 和 java 6 上运行,突然抛出这个异常

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.32 日志中提供了根本原因的完整堆栈跟踪。 Apache Tomcat/6.0.32

最佳答案

问题是由于您的网络应用程序(在本例中为 JSP 框架)试图从仅包含 API 的 JAR 文件加载类。

这是问题的另一个示例(尽管可能针对不同的 Java EE API):

说明:一些 Java EE API 有两种形式;即 2 个不同的 JAR 文件:

  • 特定于平台的表单包含所有方法的代码。此 JAR 通常是 Web 容器的一部分,默认情况下包含在每个 Web 应用的有效类路径中。

  • 仅 API 形式的方法的可执行代码已被剥离。此 JAR 由 Oracle 提供,允许您独立于任何特定的 Java EE 实现来编译 Java EE 应用程序代码。

问题很可能是您将这些仅 API JAR 之一放到了您的网络应用程序的运行时类路径中,并且它优先于特定于平台的 JAR。

鉴于这是“突然发生的”,我怀疑您一直在更改项目的 Maven 依赖项,并且(不小心)使仅 API 的 JAR 文件成为运行时依赖项而不是仅编译时依赖项。

解决方案:检查您的 Web 应用程序的 Maven(等)依赖项,或者如果您手动管理依赖项,请检查您已将哪些 JAR 放入 Web 应用程序的 WEB-INFO/lib 目录和 Web 容器的共享库目录。

关于java - 类 ClassFormatError :Absent-Code-attribute-in-method-that-is-not-native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347301/

相关文章:

java - 无法从 Android 模拟器连接到本地主机

java - 具有缓存实现的 war 文件在 grails 2.4.4 上工作正常但在 tomcat 7 上失败

java - 诊断为什么 Centos (Tomcat) 上的 java 在闲置时使用 150% CPU - JConsole?

java - 如何从文件系统调用图像?

java - Tomcat 6文件上传策略

Tomcat - 对我的 Web 服务器的奇怪请求泛滥 - 在 Apache tomcat localhost 日志上看到

java - Riak KV 2.1.1 Java客户端: No suitable method found for Client.执行()

java - Junit5:动态测试中动态断言工作异常

java - Hibernate 中的数据库加密

java - Embedded Jetty 为什么要使用 join