当前位置: 首页 > 知识库问答 >
问题:

排除Wildfly 8.2中的hibernate验证程序模块。1.

卢承弼
2023-03-14

我试图从https://github.com/dewthefifth/java-examples/tree/master/multi-ear-jms在Wildfly 8.2.1上部署Packager-01 EAR,并收到以下错误,因为Wildfly坚持从$JBOSS_HOME/模块/org/hibernate/validator/main而不是位于我的耳朵。

Caused by: java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.hibernate.validator.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:223)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:87)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
    ... 3 more

注意:这是部署在同一应用服务器上的不同应用程序所需的自定义部署模块。在部署另一个应用程序(包括多个自定义Hibernate模块)之前,我能够部署EAR。

我尝试使用以下jboss部署结构排除验证器模块(基本上是通过添加google结果所暗示的所有排除项组合而成),但没有成功。无论我做什么,正在加载的验证器都是Hibernate validator 4.2。0.Final而我耳中提供的验证器是hibernate-validator-6.0。7.决赛。jar

<jboss-deployment-structure>
<!-- Make sub deployments isolated by default, so they cannot see each others classes without a Class-Path entry -->
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<!-- This corresponds to the top level deployment. For a war this is the war's module, for an ear -->
<!-- This is the top level ear module, which contains all the classes in the EAR's lib folder -->
<deployment>
    <exclude-subsystems>
        <subsystem name="jaxrs" />
        <subsystem name="resteasy" />
    </exclude-subsystems>
    <exclusions>
        <!-- Exclude Jackson - I included my own -->
        <module name="com.fasterxml.jackson.core.jackson-annotations" />
        <module name="com.fasterxml.jackson.core.jackson-core" />
        <module name="com.fasterxml.jackson.core.jackson-databind" />
        <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
        <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        <module name="org.jboss.resteasy.resteasy-jackson2-provider" />

        <module name="org.apache.xalan" />
        <module name="org.apache.xerces" />
        <module name="org.jboss.logging" />

        <!-- Exclude Hibernate -->
        <module name="org.hibernate" />

        <!-- Exclude hibernate validation -->
        <module name="org.jboss.resteasy.resteasy-validator-provider-11" />
        <module name="org.hibernate.validator" />
        <module name="javax.validation.api" />
        <module name="javaee.api" />
        <module name="javax.faces.api" />
    </exclusions>
    <!-- This allows you to define additional dependencies, it is the same as using the Dependencies: manifest attribute -->
    <dependencies>

    </dependencies>
</deployment>

如果有人知道我需要排除哪个子系统,我将非常感谢您的帮助。

注意:我正在分享我的Wildfly 8.2。1,甚至使用我的Wildfly 8.2。1因为这些是我的客户部署站点对我施加的限制。

更新1:感谢迄今为止的帮助。

我的新排除列表包含以下错误

        <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        <module name="org.jboss.resteasy.resteasy-jackson2-provider" />

        <module name="org.apache.xalan" />
        <module name="org.apache.xerces" />
        <module name="org.jboss.logging" />

        <!-- Exclude Hibernate -->
        <module name="org.hibernate" />
        <module name="javax.persistence.api" />

        <!-- Exclude hibernate validation -->
        <module name="org.hibernate.validator" />


        <module name="org.jboss.invocation" />
        <module name="org.jboss.as.connector" />
        <module name="org.jboss.as.ee" />
        <module name="org.jboss.as.jpa" />
        <module name="org.jboss.as.jpa.hibernate" />
        <module name="javax.resource.api" />
        <module name="org.jboss.as.ejb-client" />
        <module name="org.jboss.as.weld" />
        <module name="org.jboss.ironjacamar.impl" />
        <module name="org.jboss.ironjacamar.jdbcadapters" />
        <module name="org.jboss.resteasy.resteasy-jaxrs" />
        <module name="org.jboss.resteasy.resteasy-validator-provider-11" />

        <module name="javaee.api" />
        <module name="javax.el.api" />
        <module name="javax.enterprise.api" />
        <module name="javax.faces.api" />
        <module name="javax.persistence.api" />
        <module name="javax.servlet.jsp.api" />
        <module name="javax.validation.api" />

    </exclusions>
    <!-- This allows you to define additional dependencies, it is the same as using the Dependencies: manifest attribute -->
    <dependencies>

    </dependencies>
</deployment>

我通过为所有JBOSS打开TRACE级别登录并基本上添加排除项来确定,直到我停止看到Hibernate 4.0.2被加载。我还不能确切地找出其中哪一个是真正的库珀里特人,但我们有进展了。

我将补充说,WAR现在不再部署,因为它缺少核心jee库...(正如你所料)。我会在找到时间的时候更新,希望最终产生它工作所需的真正的(最少的)排除集。

共有2个答案

郭坚壁
2023-03-14

我最终在另一个项目/模块上获得了一些成功,该项目/模块可在https://github.com/dewthefifth/spring-boot-ear-skinny-war/tree/spring-boot-2.0-with-spring-legacy-with-wfcore-209-workaround.

具体来说,web0项目很幸运地删除了验证器,但任何从EAR中删除它的尝试都失败了。

github链接专注于删除,以便Spring 5可以在JBOSS和Wildfly上使用。它包括一个README,其中包含测试了哪些版本的Wildfly和JBOSS的详细信息,以及JBOSS不起作用的版本的变通方法(它不漂亮)。

籍靖
2023-03-14

我认为您还需要将其从所有依赖项中排除。我正在研究6.4EAP,因此它可能会对您的jboss版本稍有改变,但请尝试一下。因此,转到您的模块jboss子目录并grep fororg。冬眠验证程序grep-ir“org.hibernate.validator”。)如果您在linux上。

这将显示如下结果:

./system/layers/base/org/hibernate/validator/main/module.xml:<module xmlns="urn:jboss:module:1.1" name="org.hibernate.validator">
./system/layers/base/org/jboss/as/jpa/hibernate/3/module.xml:        <module name="org.hibernate.validator"/>
./system/layers/base/org/jboss/as/jpa/hibernate/4/module.xml:        <module name="org.hibernate.validator"/>
./system/layers/base/org/jboss/as/jpa/main/module.xml:        <module name="org.hibernate.validator"/>
./system/layers/base/org/jboss/as/ee/main/module.xml:        <module name="org.hibernate.validator" optional="true"/>
./system/layers/base/org/jboss/as/connector/main/module.xml:        <module name="org.hibernate.validator"/>
./system/layers/base/org/jboss/resteasy/resteasy-hibernatevalidator-provider/main/module.xml:        <module name="org.hibernate.validator"/>
./system/layers/base/org/jboss/ironjacamar/impl/main/module.xml:        <module name="org.hibernate.validator"/>
./system/layers/base/org/jboss/ironjacamar/jdbcadapters/main/module.xml:        <module name="org.hibernate.validator"/>

然后你可以知道你需要哪些模块,以及你需要从哪些模块中排除它。我在这里发布我的配置...也许对你有帮助

<deployment>
    <exclusions>
        <module name="org.apache.log4j"/>
        <module name="org.apache.commons.logging"/>
        <module name="org.slf4j"/>
        <module name="org.jboss.logging"/>
        <module name="org.hibernate"/>
        <module name="org.hibernate.validator"/>

        <module name="javaee.api"/>
        <module name="javax.el.api"/>
        <module name="javax.enterprise.api"/>
        <module name="javax.faces.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.servlet.jsp.api"/>
        <module name="javax.validation.api"/>
    </exclusions>
    <dependencies>
        <module name="javax.annotation.api" export="true"/>
        <module name="javax.ejb.api" export="true"/>
        <module name="javax.interceptor.api" export="true"/>
        <module name="org.jboss.modules" export="true"/>
        <module name="javax.servlet.jsp.api" export="true">
            <imports>
                <include path="/**"/>
                <exclude-set>
                    <path name="javax/el"/>
                </exclude-set>
            </imports>
        </module>
        <module name="javax.enterprise.api" export="true">
            <imports>
                <include path="/**"/>
                <exclude-set>
                    <path name="javax/el"/>
                </exclude-set>
            </imports>
        </module>
    </dependencies>
</deployment>

<sub-deployment name="admin.war">
    <exclusions>
        <module name="javaee.api"/>
        <module name="javax.el.api"/>
        <module name="javax.enterprise.api"/>
        <module name="javax.faces.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.servlet.jsp.api"/>
        <module name="javax.validation.api"/>
        <module name="org.apache.commons.logging"/>
        <module name="org.apache.log4j"/>
        <module name="org.jboss.logging"/>
        <module name="org.hibernate"/>
        <module name="org.hibernate.validator"/>
        <module name="org.slf4j"/>
    </exclusions>
    <local-last value="true"/>
</sub-deployment>

对我来说,当我删除javax/el

 类似资料:
  • 问题内容: Hibernate验证程序是否支持国际化。我看到了罐子,可以看到各种ValidationMessages.properties文件。 我们是否可以创建自己的将国际化的自定义错误消息?我不想使用Hibernate验证程序默认提供的错误消息。 我们需要使用我们自己的自定义消息,它们应该被国际化。 Hibernate验证程序支持哪些语言。在jar中,我看到了英语,法语,德语,土耳其语和蒙古语

  • 我试图使用appclient部署我的jar,但我得到了这个错误。 这是我的部署命令 从该错误中可以清楚地看到“java.lang.ClassNotFoundException:com.serverapi.ServiceManagerBeanRemote From[Module”deployment.socket-gateway.jar:main“From Service Module Loader

  • 环境 Glassfish 3.1.2内置Hibernate-Validator 4.2。

  • 问题内容: 我试图在Sphinx中使用autodoc打印出特定模块中每个函数的文档字符串,但不包括模块的文档字符串。可能吗? 原因是我使用模块docstring指定命令行选项(带有可爱的docopt)。 问题答案: 将以下内容添加到 conf.py中 : 此代码通过为autodoc-process-docstring事件提供处理程序来删除模块中的模块docstring。

  • 问题内容: 我正在使用Maven / Jenkins CI运行sonar-5.1.2。 搜寻并浏览了类似的问题(大多数问题可以追溯到2010-2012)之后,仍不清楚如何从多模块Maven项目中排除特定的Maven模块。 *从4.3版开始,“ *模块排除” 属性已弃用,并且不应再使用。 我们在不同的模块中复制了软件包: 是否可以仅从文件中排除文件但包括文件? SonarQube分析由https:/

  • 这个问题已经被问了很多次了,即使是在经历了所有的解决方案之后,我也无法让hibernate validator工作。 控制器类:- servlet-上下文:- 依赖关系:- 验证类:- 我错过了什么?