java - 如何使用 OVal 验证框架为基于自定义 XML 的方法约束添加其他上下文/值

标签 java validation oval

使用 OVal 验证框架 (http://oval.sourceforge.net/),可以创建自定义注释或基于 XML 的约束 (http://oval.sourceforge.net/userguide.html#d4e493)。

我的目的是根据一些约束定义生成 OVal XML 配置文件,这就是为什么我想使用 XML 配置完成完整的 OVal 约束定义 (http://oval.sourceforge.net/userguide.html# d4e551)。

我想验证类 (Attend) 的某个方法 (getDomain) 的返回值,并且我必须为自定义检查类的 isSatisfied 方法添加其他值(六个字符串)。

到目前为止,我的 XML 配置如下所示:

<class type="my.package.Attend"
    overwrite="false" applyFieldConstraintsToSetter="true">

    <field name="NAME">
        <notNull />
        <maxLength max="4" />
    </field>

    <method name="getDomain">
        <returnValue>
            <my.package.DomainCheck />
        </returnValue>
    </method>

</class>

我有一个检查器类 DomainCheck ,它应该从 getDomain 方法接收返回值。 在 DomainCheck 的 isSatisfied 方法中,我必须使用一些必须在 XML 中以某种方式配置的附加参数来验证返回值。

我的第一个问题是,DomainCheck 的 isSatisfied 方法没有被调用。 如果我删除方法约束,验证结果将无效,正如我从字段约束中期望的那样。但如果我添加方法约束,则不会调用 DomainCheck 并且验证结果有效(应该仍然无效)。我不明白为什么不调用自定义检查。我的方法约束定义一定有问题。 这是我的自定义检查类和相应的接口(interface):

package my.package;

import ...

public class DomainCheck extends AbstractAnnotationCheck<Domain> {


    public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context, Validator validator) {
        if (valueToValidate == null) {
            return true;
        }

        List<?> domainMembers = (ArrayList<?>) valueToValidate;
        for (Object domainMember : domainMembers) {
            // do validation
        }

        return false
    }

}

package my.package;

import ...

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@net.sf.oval.configuration.annotation.Constraint(checkWith = DomainCheck.class)
public @interface Domain {

    String message() default "must be conform to ...";
}

如果这可行,我的第二个问题将是配置附加参数。 我想到了这样的事情:

    <method name="getDomain">
        <returnValue>
            <my.package.DomainCheck />
        </returnValue>
        <parameter type="java.lang.String">OneName</parameter>
        <parameter type="java.lang.String">AnotherName</parameter>
        <parameter type="java.lang.String">0</parameter>
        <parameter type="java.lang.String">*</parameter>
        <parameter type="java.lang.String">5</parameter>
        <parameter type="java.lang.String">100</parameter>
    </method>

上面的语法是为方法签名定义约束,所以这显然不起作用。但我找不到任何可能的定义来满足我的目的。

那么,为什么我的自定义检查没有被调用,如果有解决方案,我如何在 XML 配置中为 isSatisfied 方法定义附加参数以及如何在 isSatisfied 方法中访问它们?

预先感谢您的任何建议! 大卫干杯

最佳答案

您正在尝试在此处使用按契约(Contract)编程功能。为此,您需要执行一些额外的准备工作:http://oval.sourceforge.net/userguide.html#project-preparation

关于java - 如何使用 OVal 验证框架为基于自定义 XML 的方法约束添加其他上下文/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8258805/

相关文章:

java - 无法解析符号 "postDelayed"

java - 为什么我的消息在 Java 套接字服务器中只发送一次?

java - 用反射覆盖注释?

java - Axis 2 中 SOAP 消息的加密

django - 删除自定义验证器后,Django 崩溃并且无法恢复到运行备份。漏洞?

javascript - 在 Jquery 验证插件中使用自己的自定义消息和规则验证选择框

asp.net-mvc - ASP.NET MVC : Is Data Annotation Validation Enough?

java - 在 Oval 注释中传递动态值

java - Spring Boot 和 OVal 上的验证问题

java - "Unable to locate tools.jar"运行 Ant 时