我有一个简单的restful Web服务,它使用Bean Validation 1.1(和Hibernate Validator 5.1.3作为实现),我将它部署在JBoss EAP 6.4.0上 . 由于JBoss 6.4捆绑了Bean Validation 1.0及其实现库(Hibernate Validator 4.3.2),因此存在冲突,并且没有任何服务调用 . 以下是我得到的错误:
java.lang.NoSuchMethodError: javax.validation.Validator.forExecutables()Ljavax/validation/executable/ExecutableValidator;
org.apache.cxf.validation.BeanValidationProvider.getExecutableValidator(BeanValidationProvider.java:153)
org.apache.cxf.validation.BeanValidationProvider.validateReturnValue(BeanValidationProvider.java:124)
org.apache.cxf.validation.BeanValidationOutInterceptor.handleValidation(BeanValidationOutInterceptor.java:45)
org.apache.cxf.validation.AbstractValidationInterceptor.handleMessage(AbstractVa
由JBoss提供的类/方法's referenced above in the exception is only available in validation api 1.1. Hence, I want to exclude the modules ' javax.validation.api ' and ' org.hibernate.validator ' that',以便可以使用war文件中捆绑的jar . 为此,我创建了一个包含以下内容的 jboss-deployment-structure.xml 文件,并将其放在应用程序的WEB-INF文件夹中:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="javax.validation.api" />
<module name="org.hibernate.validator" />
</exclusions>
</deployment>
</jboss-deployment-structure>
现在,我得到了这个错误:
java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:135)
org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45)
org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:236)
javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
我究竟做错了什么?如何在JBoss 6.4.0中使用bean验证1.1?
1 回答
在JBoss EAP中警告所有jee api都由一个模块提供:javaee.api因此,如果您只想升级一个,则需要排除javaee.api并重新包含所有其他模块 . 所以使用以下jboss-deployment-structure.xml