JBoss - 如何在jboss-deployment-structure中排除javax.validation?

时间:2015-12-15 15:43:51

标签: java deployment jboss

我有.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?请帮帮我

2 个答案:

答案 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。

那么 - 该怎么办?

  1. 将JBoss更新为7.0.0版本,但现在只是Alpha和Beta版本:(
  2. 在新版本.jar上替换旧的javax.validation.api .jar (在 EAP-6.4.0 / modules / system / layers / base / javax / faces / api / main
  3. 添加自定义版本,它纠结: 更改 EAP-6.4.0 / modules / system / layers / base / javax / faces / api / main module.xml 文件中的默认配置,行{{1}删除选项<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
  4. 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>