使用jpa获取以下junit测试用例的错误

时间:2014-06-12 07:25:23

标签: jpa junit

以下是我使用jpa的junit测试用例

package com.msat.srt.dao;

import static org.junit.Assert.*;

import java.util.List;



import javax.persistence.EntityManager;  
import javax.persistence.EntityManagerFactory;  
import javax.persistence.Persistence;  
import javax.persistence.Query;

import org.apache.log4j.BasicConfigurator;  
import org.apache.log4j.Level;  
import org.apache.log4j.Logger;  
import org.junit.Before;  
import org.junit.BeforeClass;  
import org.junit.Ignore;  
import org.junit.Test;  


import com.msat.srt.vo.MarvalUpdateVO;

public class MarvalUpdateEJBTest {

      private static final String PERSISTENCE_UNIT_NAME = "SRTEJB";
      private static EntityManagerFactory emf;
      private EntityManager em;

    @BeforeClass
        public static void initializeLogging() {
          BasicConfigurator.configure();
          Logger.getLogger("org").setLevel(Level.ERROR);
        }

    @Before
      public void setUp() throws Exception {
         emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
         em = emf.createEntityManager();

     }
    @Test
    public void testGetAllTicketTypes() {

        Query qry = em.createQuery("select tb from TblSrtttypemaster tb");
        assertTrue(qry.getResultList().size() == 4);
          }

    }

我收到以下错误消息..我不知道如何纠正它。我是否需要在上面的测试类中再次包含db连接的属性??

    java.lang.ClassFormatError: 

        Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation   

        at java.lang.ClassLoader.defineClass1(Native Method)   
        at java.lang.ClassLoader.defineClassCond(Unknown Source)  
        at java.lang.ClassLoader.defineClass(Unknown Source)  
        at java.security.SecureClassLoader.defineClass(Unknown Source)  
        at java.net.URLClassLoader.defineClass(Unknown Source)  
        at java.net.URLClassLoader.access$000(Unknown Source)  
        at java.net.URLClassLoader$1.run(Unknown Source)  
        at java.security.AccessController.doPrivileged(Native Method)  
        at java.net.URLClassLoader.findClass(Unknown Source)  
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:170)    
        at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL    (BeanValidationActivator.java:103)    
        at org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL     (Configuration.java:1674)
        at org.hibernate.cfg.Configuration.applyConstraintsToDDL(Configuration.java:1624)
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1415)
        at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345)
        at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1477)
        at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)    
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1096)    
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:278)    
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:362)    
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)   
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)   
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
        at com.msat.srt.dao.MarvalUpdateEJBTest.setUp(MarvalUpdateEJBTest.java:43)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)    
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        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)

我正在使用JPA,这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="SRTEJB" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/srt</jta-data-source>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
    <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>
    <property name="hibernate.show_sql" value="false"/> 
    </properties>
    </persistence-unit>
</persistence>

1 个答案:

答案 0 :(得分:0)

这似乎是使用其中一个依赖项的问题

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

OR

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

作为州here

  

此依赖项为您提供Java EE API,而不是实现。虽然此依赖项适用于编译,但它不能用于执行代码(包括测试)。

mkyong的一个解决方案:

  

好的做法是始终从http://java.sun.com/javaee/获取原始完整版本的javaee.jar文件。只需下载并安装J2EE SDK,就可以在“\ J2EE_SDK_FOLDER \ lib”文件夹中找到javaee.jar。将它包含在您的本地Maven存储库或poject类路径中将消除上述错误消息。

community.jboss提供的另一种解决方案:

  

在两种情况下实际适用的另一种解决方案是使用[服务器供应商]提供的Java EE规范工件,例如

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javaee-api</artifactId>
    <version>3.1.1</version>
</dependency>

你可以search related issues。虽然&#34;缺席代码&#34;可能不一样,你会发现问题主要是由于&#34;空&#34; javaee-api jar