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

问题描述 投票:2回答:2

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

java deployment jboss
2个回答
5
投票

好的,所以你不仅需要排除

<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验证排除工作:)


1
投票

所以,这是一件事!可能对某人有所帮助:JBoss中的库javax.validation.api - 属于Implicit模块,有关隐式模块的文档:implicit module dependencies

所以隐式模块是自动依赖关系,它们可以排除,关于此:class lading and automatic dependencies - 关于自动依赖关系的部分:可以通过使用jboss-deployment-structure.xml排除自动依赖关系。但这不行! :(和JBoss有类似的库javax.persistence的bug,它在任务中打开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文件中的默认配置,行<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>
© www.soinside.com 2019 - 2024. All rights reserved.