Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果放在库jar中,则未拾取Bean验证配置_Java_Jakarta Ee_Bean Validation_Websphere Liberty - Fatal编程技术网

Java 如果放在库jar中,则未拾取Bean验证配置

Java 如果放在库jar中,则未拾取Bean验证配置,java,jakarta-ee,bean-validation,websphere-liberty,Java,Jakarta Ee,Bean Validation,Websphere Liberty,我正在JavaEE7Web应用程序中使用BeanValidation1.1。验证工作正常,但我很难让它在Wildfly和Liberty上工作 我已经通过validation.xml配置了一个自定义消息插值器,它被放置在库jar中: ROOT |-- WEB-INF |-- lib |-- my-validation.jar |-- mypackage |-- MyMessageInterpolator.class

我正在JavaEE7Web应用程序中使用BeanValidation1.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应用程序中(不移动消息插入器本身):

这在Liberty上是可行的,但我希望它在
validation.xml
放在库jar中时也能起作用。报告说:

除非明确忽略[…],否则
配置将考虑
META-INF/validation.xml
中可用的配置


我在这里遗漏了什么?

这似乎在按预期工作。BeanValidation规范在JavaEE或JavaSE环境中工作,因此当它说
META-INF/validation.xml
时,通常是相对于JavaEE环境中的
WEB-INF/classes/

为了进行比较,如果您想在.war模块中使用JPA的persistence.xml,则需要将其放在
WEB-INF/classes/META-INF/persistence.xml
中。与CDI的beans.xml相同,它位于.war模块的
WEB-INF/classes/beans.xml


在其他地方也可能允许这样做,但从我所看到的情况来看,支持其他位置并不是规范所定义的。

我同意安迪关于自由默认行为的回答。但是,有一个属性,
com.ibm.ws.beanvalidation.allowMultipleConfigsPerApp
,可以对其进行配置,以获取所需的行为。通过设置
com.ibm.ws.beanvalidation.allowMultipleConfigsPerApp=false
(默认值为true),整个应用程序将被扫描为单个
META-INF/validation.xml
,并应用于所有模块。这样做的缺点是应用程序中只能定义一个validation.xml。如果找到多个,将发生部署错误

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


将该属性设置为false解决了我的问题,但我仍然不明白为什么。据我所知,WEB-INF/lib/my-validation.jar/META-INF/validation.xml文件在WEB模块的类路径中与WEB-INF/classes/META-INF/validation.xml文件一样多,因此应该使用它。甚至PI43130的描述似乎也不太合适,因为它涉及应用程序(!)类路径中的多个validation.xml文件。然而,我在类路径中只有一个validation.xml,但它被忽略了。
ROOT
|-- WEB-INF
    |-- classes
        |-- META-INF
            |-- validation.xml
    |-- lib
        |-- my-validation.jar
            |-- mypackage
                |-- MyMessageInterpolator.class