我有.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?请帮帮我
答案 0 :(得分:3)
好的,所以你不仅要排除
<module name="javax.validation.api"/>
本身,还有依赖于javax.validation.api模块的模块。最简单的方法是查看哪些模块依赖于javax.validation.api并强制它包含在内,即使它已被排除,也就是搜索你的.xml文件 javax.validation.api的JBOSS_DIRECTORY / modules,依赖的模块在module.xml中有类似的东西:
<dependencies>>
<module name="javax.validation.api"/>
...
这些模块也需要被排除在外。对我来说 - 我还需要排除:
<module name="javax.faces.api"/>
<module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
然后,javax验证排除正在起作用:)
答案 1 :(得分:1)
所以,这是一件事!可能对某人有所帮助: JBoss中的库javax.validation.api - 属于隐式模块,有关隐式模块的文档:implicit module dependencies
所以隐式模块是自动依赖关系,并且可以排除它们:class lading and automatic dependencies - 关于自动依赖关系的部分: 可以通过使用jboss-deployment-structure.xml 来排除自动依赖项。但这不行! :(和JBoss有类似的库javax.persistence的错误,它在任务中打开bug。
那么 - 该怎么办?
<module name="javax.validation.api" export="true"/>
,结果:export="true"
这已更改为允许您添加新的自定义库javax.validation。
并在 EAP-6.4.0 / modules / system / layers / base / javax / validation / api 中创建名为 1.1 的自定义文件夹,输入 1.1 文件夹新的javax.validation .jar 和 model.xml 。model.xml:
<module name="javax.validation.api"/>
PARAMS: slot - name自定义文件夹(1.1), path - .jar库的路径
Last:将模块添加到项目中的jboss-deployment-structure.xml:
<?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>