С помощью инфраструктуры проверки OVal (http://oval.sourceforge.net/) можно создавать пользовательские аннотации или ограничения на основе XML (http://oval.sourceforge.net/userguide.html#d4e493).
). Я собираюсь создать файл конфигурации OVal XML из некоторых определений ограничений, поэтому я хотел быЯ хотел бы сделать полное определение ограничения OVal с конфигурацией XML (http://oval.sourceforge.net/userguide.html#d4e551).
. Я хотел бы проверить возвращаемое значение определенного метода (getDomain) класса (Attend), и мне нужно добавить дополнительные значения (шесть строк) для метода 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В методе isSatisfied DomainCheck я должен проверить возвращаемое значение с некоторыми дополнительными параметрами, которые мне нужно каким-то образом настроить в XML.
Моя первая проблема заключается в том, что метод isSatisfied в DomainCheck не являетсяЕсли удалить ограничение метода, тРезультат проверки недействителен, так как я ожидаю его от ограничения поля.Но если я добавлю ограничение метода, DomainCheck не будет вызван, и результат проверки будет действительным (все равно должен быть недействительным).Я не могу понять, почему не вызывается пользовательская проверка.Что-то должно быть не так с моим определением ограничения метода.Вот мой пользовательский класс проверки и соответствующий интерфейс:
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>
Синтаксис выше для определения ограничений для сигнатуры метода, так что это, очевидно, не работает.Но я не могу найти какое-либо возможное определение для моей цели.
Итак, почему моя пользовательская проверка не вызывается и если есть решение для этого, как я могу определить дополнительные параметры для метода isSatisfied в конфигурации XMLи как я могу получить к ним доступ в методе isSatisfied?
Заранее благодарю за любой совет!Ура Давид