在 DRL 文件上抛出异常时获取 "unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.throw()"
Getting "unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.throw()" when throwing an exception on DRL file
我正在尝试将 drools 与 Spring Boot 集成,如果模型的 属性 不满足,我想抛出异常。
对于这种情况,我有一个 Client 模型,想检查它的 lastName 字段是否为 NULL - 如果是,则抛出异常。
但是,我在编译时得到一个 "unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.throw()"。正确的尝试方法是什么?
我尝试使用全局来更新一个字段并且它正在工作,但是为了方便起见,我只想抛出一个异常并显示一条消息。
下面是我的配置文件:
@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>
=========================================
这是编译时的错误:
Unable to Analyse Expression throw new CreateClientException("LastName is required");:
[Error: unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.throw()]
[Near : {... throw new CreateClientExceptio ....}]
^
[Line: 6, Column: 0] : [Rule name='Required fields']
我已经检查了这个 link 关于这个,我真的不知道我错过了什么。提前谢谢你
您必须删除 drl 文件中的 "dialect "mvel"" 关键字。
这似乎是mvel的限制。在 then 块中使用 java 方法,下面只是一个例子。使用静态方法专用 class 并在各自的 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
我正在尝试将 drools 与 Spring Boot 集成,如果模型的 属性 不满足,我想抛出异常。
对于这种情况,我有一个 Client 模型,想检查它的 lastName 字段是否为 NULL - 如果是,则抛出异常。
但是,我在编译时得到一个 "unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.throw()"。正确的尝试方法是什么?
我尝试使用全局来更新一个字段并且它正在工作,但是为了方便起见,我只想抛出一个异常并显示一条消息。
下面是我的配置文件:
@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>
=========================================
这是编译时的错误:
Unable to Analyse Expression throw new CreateClientException("LastName is required");: [Error: unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.throw()] [Near : {... throw new CreateClientExceptio ....}] ^ [Line: 6, Column: 0] : [Rule name='Required fields']
我已经检查了这个 link 关于这个,我真的不知道我错过了什么。提前谢谢你
您必须删除 drl 文件中的 "dialect "mvel"" 关键字。
这似乎是mvel的限制。在 then 块中使用 java 方法,下面只是一个例子。使用静态方法专用 class 并在各自的 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