Joj*_*jje 6 jsf unit-testing ejb-3.0
当我尝试单元测试处理JSF组件的Java类(javax.faces.model.SelectItem)时,我收到一个奇怪的错误.我得到的错误是这样的:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/faces/model/SelectItem
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ...
然后它到达我的代码(在ItemOptionsHandler.java中):
SelectItem [] items = new SelectItem [itemList.size()];
什么是这个错误所有关于???
感谢您的帮助!
这是我要测试的类:
package foo.web.converters;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.model.SelectItem;
import foo.business.facade.ItemFacade;
import foo.model.MyType;
public class ItemOptionsHandler implements Serializable {
   @EJB
   private ItemFacade facade;
   public void setFacade(ItemFacade facade) {
      this.facade = facade;
   }
   public SelectItem[] getSupplierItems() {
      List<MyType> itemList = facade.getSupplierItems();
      SelectItem[] items = new SelectItem[itemList.size()];
      int i = 0;
      // more stuff
      return items;
   }
}
这是测试:
package foo.web.converters;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import foo.facade.ItemFacade;
import foo.model.MyModel;
public class ItemOptionsHandlerTest {
   private ItemOptionsHandler instance = null;
   public ItemOptionsHandlerTest() {
   }
   @BeforeClass
   public static void setUpClass() throws Exception {
   }
   @AfterClass
   public static void tearDownClass() throws Exception {
   }
   @Before
   public void setUp() {
      instance = new ItemOptionsHandler();
      instance.setFacade(new BusinessFacadeTemp());
   }
   @After
   public void tearDown() {
   }
   @Test
   public void testGetSupplierItems() {
      System.out.println("getSupplierGroups");
      SelectItem[] expResult = null;
      SelectItem[] result = instance.getSupplierItems();
      assertEquals(expResult, result); 
   }
   private class BusinessFacadeTemp implements ItemFacade {
      @Override
      public List<MyTest> getSupplierItems() {
         return null;
      }
   }
}
以下是一些依赖项:
 <dependency>
         <groupId>javax</groupId>
         <artifactId>javaee-web-api</artifactId>
         <version>6.0</version>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>javax.annotation</groupId>
         <artifactId>jsr250-api</artifactId>
         <version>1.0</version>
      </dependency>
      <dependency>
         <groupId>javax.faces</groupId>
         <artifactId>jsf-api</artifactId>
         <version>1.2</version>
      </dependency>
      <dependency>
         <groupId>javax.faces</groupId>
         <artifactId>jsf-impl</artifactId>
         <version>1.2-b19</version>
      </dependency>
您是否使用maven来解决依赖关系?如果是这样,这似乎是一个答案:http://weblogs.java.net/blog/ludo/archive/2007/01/java_ee_5_apis.html
您可以从磁盘下载 .jar 并使用它:
<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-web-api</artifactId>
  <version>6.0</version>
  <scope>provided</scope>
  <systemPath>/path/to/your/jar</systemPath>
</dependency>
| 归档时间: | 
 | 
| 查看次数: | 8132 次 | 
| 最近记录: |