java - 如果放置在库 jar 中,则不会拾取 Bean 验证配置

标签 java jakarta-ee bean-validation websphere-liberty

我在 Java EE 7 Web 应用程序中使用 Bean Validation 1.1。验证工作正常,但我很难让它在 Wildfly 和 Liberty 上工作。

我已经通过validation.xml配置了一个自定义消息插值器,它放置在库jar中:

ROOT
|-- WEB-INF
    |-- lib
        |-- my-validation.jar
            |-- mypackage
                |-- MyMessageInterpolator.class
            |-- META-INF
                |--validation.xml

部署到 Wildfly 14 后,一切都按预期运行。然而,在 Liberty 19 上,找到了 MyMessageInterpolator,但在验证期间未调用(例如,在 REST 资源中使用 @Valid 时)。

然后,我将 validation.xml 直接移至 Web 应用程序中(不移动消息插值器本身):

ROOT
|-- WEB-INF
    |-- classes
        |-- META-INF
            |-- validation.xml
    |-- lib
        |-- my-validation.jar
            |-- mypackage
                |-- MyMessageInterpolator.class

这适用于 Liberty,但我希望当 validation.xml 放置在库 jar 中时它也能工作。 Bean Validation 1.1 spec说:

Unless explicitly ignored [...], a Configuration takes into account the configuration available in META-INF/validation.xml.

我在这里缺少什么?

最佳答案

我同意 Andy 对 Liberty 默认行为的回答。不过,有一个属性 com.ibm.ws.beanvalidation.allowMultipleConfigsPerApp,可以配置它以获得您正在寻找的行为。通过设置 com.ibm.ws.beanvalidation.allowMultipleConfigsPerApp=false(默认值为 true),将扫描整个应用程序以查找单个 META-INF/validation.xml并应用于所有模块。这样做的缺点是您的应用程序中只能定义一个validation.xml。如果发现多个,则会发生部署错误。

有关设置此属性的更多详细信息,请参阅以下链接:

https://www.ibm.com/support/knowledgecenter/en/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/rwlp_restrict.html#rwlp_restrict__BeanvalidationFeatureRestrict

http://www-01.ibm.com/support/docview.wss?uid=swg1PI43130

关于java - 如果放置在库 jar 中,则不会拾取 Bean 验证配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55455014/

相关文章:

java - 模拟一个具体的类——它总是空的

java - 无法找到/安装 Java 包 acm.graphics

java - 无法在 Windows 8.1(64 位)上启动 Eclipse Luna SR2

java - org.hibernate.ejb.QueryImpl 无法转换为 spring roo 中的类

java - 制作网络服务,采用哪种方法?

spring - JSR 303 - 自定义验证器中带注释的字段的名称

spring - 在 ConstraintValidator 中注入(inject)服务 [Bean Validator - JSR 303] Spring

java - 将文档中单词后面出现的字符串存储到数组中并将它们组合起来

java - Struts2 'Required' 字段验证拦截器不工作

spring - 将 Set<ConstraintViolation<T>> 转换为 Spring 的 BindingResults 或 Errors