我们是否有可能在drools中抛出自定义异常?
所以,我有一些规则,需要使用重要数据抛出自定义异常。
Drools Rule:
import com.statest.aifmd.etl.validator.data.ValidationException
rule "Linking Rule"
when
$dictionary: Dictionary()
$fileName: String()
then
queryFundMasterTable("String", $dictionary, $fileName);
end
function void queryFundMasterTable(String sourceFieldName Dictionary dictionary, String fileName) {
String result = dictionary.findRecord(sourceFieldName);
if ((result == null) || result.isEmpty()) {
throw new ValidationException(new ValidationMessage(fileName, Level.WARNING));
}
}
爪哇:
public void process(ExtractRow row, ValidRecord validRecord, String extractFilename) throws ValidationException {
session.execute(Arrays.asList(new Object[] { filename, dictionary}));
}
答案 0 :(得分:1)
你可以做到这一点。您将不得不尝试捕获fireAllRules调用,期望包含自定义异常的org.drools.runtime.rule.ConsequenceException。
但这是从引擎退出的一种相当粗鲁的方式,它永远不应该被用来表示常规或甚至不寻常的控制流。但是,如果您的ValidationException将导致正常关闭,那么就可以了。