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

61,177

Solution 1

It did not work because classes from javax/javaee-api/provided dependency are specially constructed. They are not usable runtime because implementation of methods is missing.

Simply adding classes from javax.mail/mail/1.4.5 dependency to the classpath does not help, because classes from javax/javaee-api/provided are already there. Having javax.mail/mail/1.4.5 dependecy alone solves your problem, but most likely you also need other classes from javax/javaee-api/provided.

What you can do is to get rid of javax/javaee-api/provided dependency and get these classes for example from the dependencies provided by target application server. You can use for example following:

   <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-6.0</artifactId>
        <version>1.0.0.Final</version>
        <type>pom</type>
        <scope>provided</scope>
     </dependency>

Because scope is provided, it does not affect the artifact to be built. That's why you can use this one also with other application servers than JBoss. It is same API as in your original dependency, but it contains normal classes.

Solution 2

Weird but the following order works for me,

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4</version>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>

The reverse won't work.

Solution 3

in my case, only use the library:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

Run with JDK 6 and Tomcat without problems

Share:
61,177
Kayser
Author by

Kayser

Software-Engineer

Updated on February 03, 2020

Comments

  • Kayser
    Kayser over 4 years

    I have a maven dependency for javaee Bibliothek.

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    

    I get the error in Eclipse in some classes.

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

    I added javax.mail dependency.

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.5</version>
    </dependency>
    

    It did not not work. Any Idea??

  • Kayser
    Kayser almost 12 years
    I need also the other libraries from javaee
  • Mikko Maunu
    Mikko Maunu almost 12 years
    I added more instructions to answer.
  • Martin Charlesworth
    Martin Charlesworth almost 10 years
    I always put the javaee-api dependency LAST in the pom.xml, with the implementation jars before it, that fixes it too
  • udaybhaskar
    udaybhaskar over 7 years
    This Actually works. @prayag upd Can you please post little more details about how it works exactly.
  • luca.vercelli
    luca.vercelli almost 3 years
    This works for me. The explaination IMHO is the following: Order is worth in class path. So, this way the compiler uses the javax.mail.MessagingException class contained in the first package, instead of the second one.