我正在尝试与Spring Boot进行Drools集成,并且如果不满足模型的属性,想抛出异常。
对于这种情况,我有一个Client模型,想检查其lastName字段是否为NULL-如果是,则抛出异常。
但是,在编译期间,我收到“无法使用严格模式解析方法:org.drools.core.spi.KnowledgeHelper.throw()”的信息。尝试此操作的正确方法是什么?
我尝试使用global来更新字段,但是它正在工作,为了方便起见,我只想在消息中引发异常。
下面是我的配置文件:
@Configuration
public class CreateClientRuleEngineConfig {
public static final String bhfCreateClientRule = "CreateClientRule.drl";
@Bean
public KieContainer kieContainer() {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newClassPathResource(bhfCreateClientRule));
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieModule kieModule = kieBuilder.getKieModule();
return kieServices.newKieContainer(kieModule.getReleaseId());
}
}
========================================= 以下是我的DRL文件:
import com.test.rulengine.entity.Client;
import com.test.rulengine.exception.CreateClientException;
dialect "mvel"
rule "Required fields"
when
clientInstance: Client( lastName == null);
then
throw new CreateClientException("LastName is required");
end
=======================================
以下是我的Maven依赖关系(注意:我没有包括与Drools / Kie不相关的其他依赖关系):
<properties>
<java.version>1.8</java.version>
<drools-version>7.0.0.Final</drools-version>
<kie-version>7.0.0.Final</kie-version>
</properties>
<dependencies>
<!-- Drools/Kie dependencies -->
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools-version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-spring</artifactId>
<version>${kie-version}</version>
</dependency>
=======================================
这是编译期间的错误:
无法分析表达式引发新的CreateClientException(“ LastName is required”);: [错误:无法使用严格模式解析方法:org.drools.core.spi.KnowledgeHelper.throw()] [附近:{...抛出新的CreateClientExceptio ....} ^ [第6行,第0列]:[规则名称=“必填字段”]
我已经检查了此链接,因此我真的无法弄清我所缺少的内容。预先谢谢你
答案 0 :(得分:0)
您必须在您的drl文件中删除“方言“奇迹””关键字。
答案 1 :(得分:0)
这似乎是mvel的局限性。在then块中使用java方法,下面仅是一个示例。用静态方法专用于一个类,并在相应的then块中执行它们。用Java代码编写Java代码...
import org.droolsassert.Client;
import org.droolsassert.CreateClientException;
import com.google.common.base.Preconditions;
dialect "mvel"
rule "Required fields"
when
clientInstance: Client( lastName == null)
then
Preconditions.checkArgument(false, "LastName is required");
end