方法中的Absent Code属性在类文件javax / servlet / ServletException中不是本机的或抽象的

我打算在我的应用程序中使用Java servlet。 我在我的项目的POM.xml文件中包含以下内容以加载Java servlet 3.0实现jar。

 org.glassfish javax.servlet 3.2-b05  

该项目编写得很好。 但是,当我运行它时,我收到以下错误:

 java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException 

我在这里搜索并发现了一些很好的答案 。

我从他们中发现,当我们包含仅包含由servlet API定义的接口而不是实际实现的JAR时,会发生此错误。 所以,我检查了我使用的glassfish jar只是接口或它也包含实现。 我发现它是一个实现而不仅仅是接口。

所以现在,我想知道为什么我在运行时收到此错误。 任何人?

更新:

刚才,我发现这是我身边一个明显的错误(我正在将jar添加到一个项目中,而正在运行一个完全不同的项目!)。 对不起,我很抱歉。 添加glassfish servlet实现可以解决问题。

谢谢,Sandeep

我在最近2个小时左右的时间里遇到了与用于surefire插件的javaee-api和javaee-web-api依赖关系相关的问题。 正如JBoss论坛上的人们刚刚发布的那样,看起来整个JEE6库被划分(根据Sun / Oracle的决定)分为API(仅限接口/存根)JAR和提供者。

这与此有何关系? 如果您遇到问题,比如FacesContext类 ,则会出现如下错误:

 java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/faces/context/FacesContext 

如果你看一下依赖树,你会在编译类路径中找到一个默认的API JAR,它也会影响运行时的问题:

 javax.faces:javax.faces-api:jar:2.1:provided 

为surefire插件配置添加显式排除将在测试时强制使用提供程序JAR依赖项:

  maven-surefire-plugin 2.12    javax.faces:javax.faces-api    

希望有所帮助,它确实对我有用。

我交易到glassfish-embedded-all并解决了这个问题。

   org.glassfish.main.extras glassfish-embedded-all 3.1.2.2 provided  
  org.glassfish.main.extras glassfish-embedded-all 3.1.2.2 provided 

它对我有用。 谢谢。 但是pom.xml中的顺序对我来说也很重要

   javax javaee-api 6.0 provided   org.glassfish.main.extras glassfish-embedded-all 3.1.2.2 test  

以上顺序不起作用

  org.glassfish.main.extras glassfish-embedded-all 3.1.2.2 test   javax javaee-api 6.0 provided  

以上订单工作

当我运行我的测试(JUnit + Mockito)时,我特别使用了Jersey。 对我有用的是将下面的代码添加到我的pom.xml文件中。

  com.sun.jersey jersey-test-framework 1.1.5.1 test  

注意:我正在使用Jersey 1.17

我最近遇到了同样的错误,感谢这个问题和上面的答案 – 特别是leandro.freitos – 我能够使用它来解决它

   org.glassfish.main.extras glassfish-embedded-all 3.1.2.2 provided  

事实certificate我的与javax.servlet有关

我有一个类似josdem的情况(同样的错误,同时运行JUnit与Mockito),但没有泽西岛。 所以这是一个独立的泽西岛解决方案,对我有用:

   org.apache.geronimo.specs geronimo-servlet_3.0_spec 1.0 test  

同样的问题在这里 虽然我发现这是我声明依赖关系的顺序。 需要在提供的javaee-web-api依赖项之前声明glassfish嵌入式依赖项。

   org.glassfish.extras glassfish-embedded-all 3.0 test   javax javaee-web-api 6.0 provided  

当测试中的javaee-web-api之后放置glassfish嵌入时,我不确定为什么类路径会变得混乱。 我想JVM首先尝试解析提供的javax类,然后在测试期间放弃。 我认为宣布测试范围优先,但在我的情况下似乎并非如此。 希望这有助于某人。

用netbeans 7.2.1编译同样的问题。 但是输出指定我自己的一个java源文件具有“缺少代码属性…….等”

同时,我可以使用JDeveloper编译和运行相同的项目。 经过一些“清理”并重新启动后,netbeans仍然出现了同样的问题。

我最后通过在报告为具有“缺少代码属性”并使用与调试目标相同的java中添加main方法来修复它。 全部恢复正常。