类似的问题:
How to use bean validation 1.1 in JBoss EAP 6.4.0?
How to change bean-validation version on jboss EAP 6.3?
Can you use bean validation 1.1 (JSR 349) in JBoss EAP 6.4.4?
如果我们可以在JBoss 6.x中使用Bean Validation 1.1,似乎存在一些不确定性。
我目前的jboss-deployment-structure.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<dependencies>
<!-- list of modules taken from https://access.redhat.com/articles/1122333 -->
<module name="javax.activation.api" />
<module name="javax.annotation.api" />
<module name="javax.ejb.api" />
<module name="javax.el.api" />
<module name="javax.enterprise.api" />
<module name="javax.enterprise.deploy.api" />
<module name="javax.faces.api" />
<module name="javax.inject.api" />
<module name="javax.interceptor.api" />
<module name="javax.jms.api" />
<module name="javax.jws.api" />
<module name="javax.mail.api" />
<module name="javax.management.j2ee.api" />
<module name="javax.persistence.api" />
<module name="javax.resource.api" />
<module name="javax.rmi.api" />
<module name="javax.security.auth.message.api" />
<module name="javax.security.jacc.api" />
<module name="javax.servlet.api" />
<module name="javax.servlet.jsp.api" />
<module name="javax.servlet.jstl.api" />
<module name="javax.transaction.api" />
<!--<module name="javax.validation.api" />-->
<module name="javax.ws.rs.api" />
<module name="javax.wsdl4j.api" />
<module name="javax.xml.bind.api" />
<module name="javax.xml.jaxp-provider" />
<module name="javax.xml.registry.api" />
<module name="javax.xml.rpc.api" />
<module name="javax.xml.soap.api" />
<module name="javax.xml.stream.api" />
<module name="javax.xml.ws.api" />
<module name="javax.api" />
</dependencies>
<exclusions>
<module name="javaee.api" />
<module name="org.hibernate.validator" />
</exclusions>
</deployment>
</jboss-deployment-structure>
我在.ear中捆绑了以下依赖项:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.2.Final</version>
</dependency>
但我得到以下stacktrace:
14:09:44,085 WARN [org.jboss.resteasy.plugins.validation.hibernate.AbstractValidatorContextResolver] (AFP-HTTP-96) Unable to load Validation support: javax.validation.ValidationException: Unable to find provider: class org.hibernate.validator.HibernateValidator
at javax.validation.Validation$ProviderSpecificBootstrapImpl.configure(Validation.java:223) [validation-api-1.0.0.GA-redhat-3.jar:1.0.0.GA-redhat-3]
at org.jboss.resteasy.plugins.validation.hibernate.AbstractValidatorContextResolver.getGeneralValidator(AbstractValidatorContextResolver.java:40) [resteasy-hibernatevalidator-provider-3.0.9.Final.jar:]
at org.jboss.resteasy.plugins.validation.hibernate.AbstractValidatorContextResolver.getContext(AbstractValidatorContextResolver.java:54) [resteasy-hibernatevalidator-provider-3.0.9.Final.jar:]
at org.jboss.resteasy.plugins.validation.hibernate.ValidatorContextResolverCDI.getContext(ValidatorContextResolverCDI.java:16) [resteasy-hibernatevalidator-provider-3.0.9.Final.jar:]
at org.jboss.resteasy.cdi.JaxrsInjectionTarget.validate(JaxrsInjectionTarget.java:113) [resteasy-cdi-3.0.9.Final.jar:]
at org.jboss.resteasy.cdi.JaxrsInjectionTarget.inject(JaxrsInjectionTarget.java:67) [resteasy-cdi-3.0.9.Final.jar:]
at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:297) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:68) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:626) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:653) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
at org.jboss.resteasy.cdi.CdiConstructorInjector.construct(CdiConstructorInjector.java:64) [resteasy-cdi-3.0.9.Final.jar:]
at org.jboss.resteasy.cdi.CdiConstructorInjector.construct(CdiConstructorInjector.java:69) [resteasy-cdi-3.0.9.Final.jar:]
at org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory.createResource(POJOResourceFactory.java:52) [resteasy-jaxrs-3.0.9.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236) [resteasy-jaxrs-3.0.9.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) [resteasy-jaxrs-3.0.9.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.9.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.9.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.9.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.9.Final.jar:]
...
正如您所看到的,验证API是validation-api-1.0.0.GA-redhat-3.jar:1.0.0.GA-redhat-3,这意味着JBoss捆绑模块实际上并未从类路径。我做错了什么或是不是让我删除javax.validation.api的错误?我是否需要用手动依赖(例如重新安装)替换更多模块?
答案 0 :(得分:8)
我已经验证了Redhat支持给出的答案 -
您可以通过排除jaxrs子系统从JBoss EAP 6中排除JBoss提供的javax.validation api类。
除了排除验证类之外,还应排除依赖于它们的模块。因此,jboss-deployment-structure.xml的排除部分应如下所示:
<exclude-subsystems>
<subsystem name="jaxrs"/>
</exclude-subsystems>
<exclusions>
<module name="javaee.api"/>
<module name="javax.validation.api"/>
<module name="javax.faces.api"/>
<module name="org.hibernate.validator"/>
</exclusions>
*注意 - 不包括javaee模块限制了RedHat的可用支持
答案 1 :(得分:3)
JBoss EAP 6.x是一个JEE6实现容器。另外请记住,更改JBoss EAP6附带的bean验证模块会破坏支持的位。
Bean Validation是JEE7规范的一部分。您需要升级到JBoss EAP7或使用社区中的WildFly 9 or 10。它们都实现了JEE7规范,其中包括Bean Validation 1.1。
答案 2 :(得分:0)
对于jboss 6.2我想使用cxf和bean验证1.1,之前的回答对我来说没有用,为了让它先工作我必须排除所有的依赖关系然后再添加javee.api,不包括导入到javax包像这样:
<exclusions>
<module name="javaee.api"/>
<module name="javax.validation.api"/>
<module name="javax.faces.api"/>
<module name="javax.faces.api" slot="1.2"/>
<module name="org.hibernate.validator"/>
</exclusions>
<dependencies>
<module name="javaee.api">
<imports>
<exclude-set>
<path name="javax/ws/rs"/>
<path name="javax/ws/rs/core"/>
<path name="javax/ws/rs/ext"/>
<path name="javax/validation"/>
<path name="javax/validation/bootstrap"/>
<path name="javax/validation/spi"/>
<path name="javax/validation/constraints"/>
<path name="javax/validation/groups"/>
<path name="javax/validation/metadata"/>
</exclude-set>
</imports>
</module>
</dependencies>
然后重复我耳中的子部署。