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

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


我通过验证配置了一个自定义消息插值器.xml它被放置在一个库罐中:


ROOT

|-- WEB-INF

    |-- lib

        |-- my-validation.jar

            |-- mypackage

                |-- MyMessageInterpolator.class

            |-- META-INF

                |--validation.xml

当部署到野蝇14时,一切都按预期工作。然而,在 Liberty 上可以找到 19,但在验证期间(例如,在 REST 资源中使用时)未被调用。MyMessageInterpolator@Valid


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


ROOT

|-- WEB-INF

    |-- classes

        |-- META-INF

            |-- validation.xml

    |-- lib

        |-- my-validation.jar

            |-- mypackage

                |-- MyMessageInterpolator.class

这是在Liberty上工作,但我预计当它被放置在一个图书馆罐子里时也能工作。豆验证 1.1 规范说:validation.xml


除非明确忽略 [...],否则 a 会考虑 中可用的配置。ConfigurationMETA-INF/validation.xml


我在这里错过了什么?


哈士奇WWW
浏览 66回答 2
2回答

猛跑小猪

我同意安迪对自由的默认行为的回答。但是,有一个属性 ,可以对其进行配置以获取您要查找的行为。通过设置(默认值为 true),将扫描整个应用程序以查找单个应用程序并应用于所有模块。这样做的缺点是只能有一个验证.xml在您的应用程序中定义。如果找到多个部署错误。com.ibm.ws.beanvalidation.allowMultipleConfigsPerAppcom.ibm.ws.beanvalidation.allowMultipleConfigsPerApp=falseMETA-INF/validation.xml有关设置此属性的更多详细信息,请参阅以下链接:https://www.ibm.com/support/knowledgecenter/en/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/rwlp_restrict.html#rwlp_restrict__BeanvalidationFeatureRestricthttp://www-01.ibm.com/support/docview.wss?uid=swg1PI43130

Helenr

这似乎正在按预期工作。豆验证规范在 JavaEE 或 JavaSE 环境中工作,所以当它说 时,这通常是相对于在 JavaEE 环境中的。META-INF/validation.xmlWEB-INF/classes/为了进行比较,如果要使用JPA的持久性.xml在.war模块中,则需要将其放在.与CDI的豆子.xml相同,它进入.war模块。WEB-INF/classes/META-INF/persistence.xmlWEB-INF/classes/beans.xml它可能在其他地方也是允许的,但从我所看到的支持其他位置不是由规范定义的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java