Buscar este blog

sábado, 23 de agosto de 2014

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

Problema al intentar hacer un test JUnit de un EJB.

Código:


 package es.pruebas.j2ee6.ejb;  
 import static org.junit.Assert.*;  
 import javax.ejb.embeddable.EJBContainer;  
 import javax.naming.Context;  
 import org.junit.After;  
 import org.junit.Before;  
 import org.junit.Test;  
 import es.pruebas.j2ee6.ejb.service.Calculadora;  
 /**  
  * @author EMILIO  
  *  
  */  
 public class TestCalculadora {  
      private EJBContainer ec;  
   private Context ctx;  
      @Before  
      public void setUp() {  
        ec = EJBContainer.createEJBContainer();  
        ctx = ec.getContext();  
      }  
      @After  
      public void tearDown() {  
           if (ec != null) {  
                ec.close();  
           }  
      }  
   @Test  
   public void testReturnMessage() throws Exception {  
        Calculadora calculadora = (Calculadora) ctx.lookup("java:global/classes/CalculadoraBean");  
        Float valor = calculadora.sumar(50f, 30f);  
        assertEquals(new Float(80), valor);  
   }  
 }  

Excepción generada:


 java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer  
      at java.lang.ClassLoader.defineClass1(Native Method)  
      at java.lang.ClassLoader.defineClass(ClassLoader.java:791)  
      at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)  
      at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)  
      at java.net.URLClassLoader.access$100(URLClassLoader.java:71)  
      at java.net.URLClassLoader$1.run(URLClassLoader.java:361)  
      at java.net.URLClassLoader$1.run(URLClassLoader.java:355)  
      at java.security.AccessController.doPrivileged(Native Method)  
      at java.net.URLClassLoader.findClass(URLClassLoader.java:354)  
      at java.lang.ClassLoader.loadClass(ClassLoader.java:423)  
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)  
      at java.lang.ClassLoader.loadClass(ClassLoader.java:356)  
      at java.lang.Class.getDeclaredFields0(Native Method)  
      at java.lang.Class.privateGetDeclaredFields(Class.java:2317)  
      at java.lang.Class.getDeclaredFields(Class.java:1762)  
      at org.junit.runners.model.TestClass.<init>(TestClass.java:44)  
      at org.junit.runners.ParentRunner.<init>(ParentRunner.java:73)  
      at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:55)  
      at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)  
      at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)  
      at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)  
      at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)  
      at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)  
      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)  
      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)  
      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)  
      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)  
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)  
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)  
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)  
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)  

Solución

Problema mágico y místico que se soluciona al reordenar las dependencias de maven. Hay que poner glassfish-embedded-all de primera.

 <dependencies>  
      <dependency>  
           <groupId>org.glassfish.main.extras</groupId>  
           <artifactId>glassfish-embedded-all</artifactId>  
           <version>4.0</version>  
           <scope>test</scope>  
      </dependency>  
      <dependency>  
           <groupId>javax</groupId>  
           <artifactId>javaee-api</artifactId>  
           <version>6.0</version>  
           <scope>provided</scope>  
      </dependency>  
      <dependency>  
           <groupId>junit</groupId>  
           <artifactId>junit</artifactId>  
           <version>4.10</version>  
           <scope>test</scope>  
      </dependency>  
 </dependencies>  

No hay comentarios:

Publicar un comentario