使用 Oval 验证框架 (http://oval.sourceforge.net/),可以创建基于注释的自定义约束 (http://oval.sourceforge.net/userguide.html#d4e493)。
我的目的是从一些约束定义中生成一个 OVal XML 配置文件,这就是为什么我想使用XML 配置(http://oval.sourceforge.net/userguide.html#d4e551) 来完成完整的 OVal 约束定义。
我可以在 XML 配置文件中定义我想要的所有约束,除了自定义约束。
基于注释我有以下代码:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import net.sf.oval.exception.ConstraintsViolatedException;
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@net.sf.oval.configuration.annotation.Constraint(checkWith = UpperCaseCheck.class)
public @interface UpperCase {
/**
* Message to be used for the ConstraintsViolatedException
*
* @see ConstraintsViolatedException
*/
String message() default "must be upper case";
}
import net.sf.oval.Validator;
import net.sf.oval.configuration.annotation.AbstractAnnotationCheck;
import net.sf.oval.context.OValContext;
public class UpperCaseCheck extends AbstractAnnotationCheck<UpperCase> {
private static final long serialVersionUID = 2715187850228144730L;
public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context, Validator validator) {
if (valueToValidate == null)
return true;
String val = valueToValidate.toString();
return val.equals(val.toUpperCase());
}
}
和注释检查:
@NotNull
@UpperCase
private String p_name;
如何在我的 XML 配置中定义自定义约束检查(大写)?