Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
因为javaee-api-6.0提供的validation只是个空壳,没有真正实现功能,为了用于开发应用的编译,不能用于程序运行。开发的应用程序丢到jboss6容器下是可以运行的,因为jboss6容器默认包含了javaee的validation和hibernate的Validator,但是我们些单元测试的时候是在junit下运行的
一、解决方法
1、当您的应用程序需要用的javaee-api(比如开发EJB、JPA),就用javee5.0+validation+hibernate-validator
这种解决方法有点不完美,就是无法使用javaee-api-6.0的特性。
javaee-api-5.0.jar
validation-api-1.0.0.GA.jar
hibernate-validator-4.3.1.Final.jar
hibernate-validator-annotation-processor-4.3.1.Final.jar
jboss-logging-3.1.0.CR2.jar
注意:hibernate4日志中加入对i18n的支持,所以采用的是jboss-logging, 所以采用的是jboss-logging,
JBoss Logging是唯一一个完整支持i18n(包括参数化)的日志库。
2、当您的应用程序只需要用bean-validation时就可以直接用 validation+hibernate-validator,把上面的
javaee-api-5.0去掉即可。
3、当你需要用到javaee-api-6.0的特性时,请使用一下jboss-javaee-all-6.0-3.0.2.Final.jar,具体maven
配置如下:
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-all-6.0</artifactId>
<version>3.0.2.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.0.CR2</version>
</dependency>
<-- 当使用了jboss-javaee-all-6.0就不需要validation-api了
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.CR3</version>
</dependency> -->