У меня проблема, когда предложение when of the drools rule выбрасывает MethodNotFoundException. Я ищу способ выяснить, какое правило это во время выполнения, чтобы удалить его из списка правил для использования.Исключение Захват в LHS Drools
Правило Пример
Rule "FooBar"
when
$V1 : Foo ( ) AND
$V2 : FooBar( ) from $V1.getGoodMethod() AND
$V3 : FooBarBar(status == "FooBar") from $V2.getBadMethod()
reply : FooFooBar()
then
reply.getList().add("FooBar");
end
Итак, getBadMethod на FooBar не существует. Я хотел бы указать, что это такое, и удалить его из списка правил для использования.
Пробовал и Неудачные решения:
я пытался расширить DefaultAgendaEventListener и переопределение метода beforeActivationFired, чтобы добавить правило увольняют в список. Я надеялся, что последним в списке будет ошибка, но, к сожалению, это не получилось.
Я уже пытался добавить правила «всегда истинные» перед всеми моими правилами. Они записывают имя правила, которое появляется после него. Проблема заключается в том, что в предложении WHEN отсутствует исключение, и ничего не регистрируется. Как будто никакие правила не срабатывают, когда возникает Исключение, такое как вышеописанное.
Проблема связана с динамическим кодом генерации слюни. Я хотел бы использовать два подхода к исправлению кода генерации и перехватывать исключения, подобные тем, которые перечислены в этом сообщении.
Замечание: Я проверяю ошибки в строителе. Я не получаю ошибок из приведенного ниже кода.
KnowledgeBuilderErrors errors = builder.getErrors();
if (!errors.isEmpty()) {
for (KnowledgeBuilderError error : errors) {
...
}
}
Привет, afaik, mvel не поддерживает захват исключений, поэтому вы можете либо изменить свое правило на использование диалекта _java_, либо использовать инструкцию try и catch при попытке запустить ваше правило. –
@kucing_terbang Я могу использовать диалект java в LHS правила слюни? Кроме того, я поймаю исключение, когда я запускаю правило, проблема в том, что иногда бывает трудно диагностировать проблему из stacktrace. –
ну, я не думаю, что вы можете это сделать. Самое близкое, о чем я могу думать, это то, что вы создаете свою собственную функцию, которая обрабатывает ошибку, которую вы вызываете в LHS. –