我正在使用JBoss Drools验证程序来验证规则文件。
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-verifier</artifactId>
<version>5.2.0.Final</version>
<scope>test</scope>
</dependency>
在规则文件中,我使用了一些自定义评估程序,如下面的
KnowledgeBuilderConfiguration builderConf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
builderConf.setOption(EvaluatorOption.get("int", (EvaluatorDefinition) Class.forName("com.company.evaluators.IntEvaluatorDefinition").newInstance()));
规则Verifier不了解这些自定义评估程序并抛出错误。有没有简单的方法将这些自定义评估程序信息传递给验证程序?我使用以下代码 -
verifier.addResourcesToVerify(ResourceFactory.newInputStreamResource (in),
ResourceType.DRL);
verifier.fireAnalysis();
//Get the Verifier errors
List<VerifierError> errors = verifier.getErrors();
if ( errors.size() > 0 ) {
System.out.println("####### Verifier Errors #############");
for (VerifierError error : errors) {
System.out.println(error.getMessage());
}
}else {
// Get the result object [5]
VerifierReport result = verifier.getResult();
// Print the the errors [6]
for(VerifierMessageBase base: result.getBySeverity( Severity.ERROR ) ){
System.out.println( base );
}
for(VerifierMessageBase base: result.getBySeverity( Severity.NOTE) ){
System.out.println( base );
}
for(VerifierMessageBase base: result.getBySeverity( Severity.WARNING) ){
System.out.println( base );
}
}
答案 0 :(得分:0)
不确定这是否是最好的方法,但请尝试将它们设置为系统属性:
drools.evaluator.<ident> = <qualified class>
例如,执行验证程序时,请在命令行中使用
java -Ddrools.evaluator.int=com.company.evaluators.IntEvaluatorDefinition ...