gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:39:44 25 4
gpt4 key购买 nike

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com