我有.war使用Jersey REST,它在tomCat中工作。但我需要在JBoss 6.4.0中运行我的.war,这会导致异常
java.lang.RuntimeException: java.lang.NoSuchMethodError:
javax.validation.spi.ConfigurationState.getParameterNameProvider()
因为JBoss使用旧版本的javax.validation,我需要从JBoss的部署中排除javax.validation。
我在.war的WEB-INF中创建了jboss-deployment-structure.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="resteasy" />
<subsystem name="jpa"/>
<subsystem name="org.hibernate" />
<subsystem name="org.hibernate.validator" />
</exclude-subsystems>
<exclusions>
<module name="javaee.api" />
<module name="javax.ws.rs.api"/>
<module name="org.jboss.resteasy.resteasy-jaxrs"/>
<module name="javax.validation.api"/>
<module name="org.hibernate"/>
<module name="org.hibernate.validator"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
这有助于我排除javax.ws.rs,但如何排除javax.validation?请帮帮我
好的,所以你不仅需要排除
<module name="javax.validation.api"/>
本身,还有依赖于javax.validation.api模块的模块。查看哪些模块依赖于javax.validation.api并强制包含它的最简单方法,即使它被排除,也是在JBOSS_DIRECTORY / modules中搜索.xml文件以获取javax.validation.api,这些模块是依赖在module.xml中有类似的东西:
<dependencies>>
<module name="javax.validation.api"/>
...
这些模块也需要被排除在外。对我来说 - 我还需要排除:
<module name="javax.faces.api"/>
<module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
然后,javax验证排除工作:)
所以,这是一件事!可能对某人有所帮助:JBoss中的库javax.validation.api - 属于Implicit模块,有关隐式模块的文档:implicit module dependencies
所以隐式模块是自动依赖关系,它们可以排除,关于此:class lading and automatic dependencies - 关于自动依赖关系的部分:可以通过使用jboss-deployment-structure.xml排除自动依赖关系。但这不行! :(和JBoss有类似的库javax.persistence的bug,它在任务中打开bug。
那么 - 该怎么办?
<module name="javax.validation.api" export="true"/>
删除选项export="true"
,结果:<module name="javax.validation.api"/>
此更改允许您添加新的自定义库javax.validation。在EAP-6.4.0 / modules / system / layers / base / javax / validation / api中创建名为1.1的自定义文件夹,放入1.1文件夹new javax.validation .jar和model.xml。model.hml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="javax.validation.api" slot="1.1"> <resources> <resource-root path="validation-api-1.1.0.Final.jar"/> </resources> <dependencies> <module name="org.jboss.logging"/> </dependencies> </module>
params:slot - name自定义文件夹(1.1),path - .jar库的路径
最后:将模块添加到项目中的jboss-deployment-structure.xml:
<dependencies>
<module name="javax.validation.api" slot="1.1" export="true"/>
</dependencies>