1

在尝试使用 Bean Validation (JSR-303) 自定义约束时,使用此处所述的注释和 XML 配置,我在日志中收到以下错误,并且忽略了约束:

<Error> <org.hibernate.validator.xml.ValidationXmlParser> <BEA-000000> <Error parsing validation.xml: null>

我使用 Weblogic 12.1.1 作为应用程序服务器,并且我的应用程序被部署为一个 war 文件。

validation.xmlconstraint-mapping.xml文件都放在 WEB-INF/classes/META-INF 下。

有人知道可能导致这种情况的原因吗?这是依赖还是冲突的库问题?

这是我的validation.xml

<validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration">
     <default-provider>org.hibernate.validator.HibernateValidator</default-provider>
     <constraint-mapping>META-INF/constraint-mapping.xml</constraint-mapping>
</validation-config>

还有我的constraint-mapping.xml

<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
                     xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
<constraint-definition annotation="foo.CustomConstraint">
    <validated-by include-existing-validators="true">
        <value>foo.CustomConstraintValidator</value>
    </validated-by>
</constraint-definition>
</constraint-mappings>

提前致谢,

迪米特里斯

更新


在遵循 Gunnar 的建议后,我做了以下事情:

  • 使用版本 4.3.1 覆盖 Weblogic 的默认休眠验证器 (4.1.0)
  • 调试了 ValidationXmlParser 类。

这给了我以下例外:

javax.xml.bind.UnmarshalException
 - with linked exception:
[Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.3.2.v20111125-r10461):
org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred unmarshalling the document
Internal Exception: org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 96;
SchemaLocation: schemaLocation value =
'http://jboss.org/xml/ns/javax/validation/configuration' must have even number of URI's.]

为了克服这个问题,我更新了validation.xml中的xsi:schemaLocation,如下所示:

xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration
                    http://jboss.org/xml/ns/javax/validation/configuration/validation-configuration-1.0.xsd"

此更改修复了先前的错误,但我的注释继续被忽略。我在这里想念什么?

4

1 回答 1

0

您的 XML 文件似乎不完整(完整示例请参见此处):

  • validation.xml缺少结束</validation-config>标签
  • constraint-maping.xml必须有<constraint-mappings>作为根元素

AFAIK WLS 12.1.1 仍然使用 Hibernate Validator 4.1.0,不幸的是它吞下JAXBException了在解组过程中引发的任何 s validation.xml。如果问题仍然存在,我建议使用 Hibernate Validator 4.1.0 源来调试问题并检查JAXBExceptionValidationXmlParser:L216中捕获的内容。在更高的 HV 版本中,也会传播根异常。

于 2013-06-17T19:52:04.683 回答