当前位置: 首页 > 知识库问答 >
问题:

在DRL文件上抛出异常时,获取“无法使用严格模式解析方法:org.drools.core.spi.知识elper.throw()”

咸高谊
2023-03-14

我正在尝试drools与Spring Boot的集成,如果模型的属性不满足,我想抛出一个异常。

对于这种情况,我有一个客户机模型,希望检查它的lastName字段是否为NULL-如果是,则抛出一个异常。

然而,我在编译时遇到了一个“无法使用严格模式解析方法:org.drools.core.spi.KnowledgeHelper.throw()”。正确的方法是什么?

我已经尝试使用global来更新字段,它正在工作,但是为了方便起见,我只想抛出一个带有消息的异常。

下面是我的配置html" target="_blank">文件:

@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(“需要姓氏”);:[错误:无法使用严格模式解析方法:org.drools.core.spi.KnowledgeHelper.throw()][附近:{…throw new CreateClientExceptio….}]^[第6行,第0列]:[规则名称='必填字段']

我已经检查了这个链接,我真的不知道我错过了什么。提前谢谢你

共有2个答案

姬弘文
2023-03-14

您必须删除drl文件中的“方言”mvel“关键字。

韩经武
2023-03-14

这似乎是mvel的限制。在那么块中使用java方法,下面只是一个例子。用静态方法专用一个类,并在相应的那么块中执行它们。用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
 类似资料:
  • 我是java和drools的新手,我必须构建一个java RESTful Web Services/规则引擎。我们已经有运行drools版本5.2的Genesys规则创作(GRAT)和Genesys规则引擎(GRE)(版本8.1.2)。我们需要获取GRAT包的源代码并在我们的开发环境的“lite规则引擎”中使用它们。对于我的POC,我安装了drools 5.2并创建了一个项目,它可以像我想要的那样

  • 我是drools的新手,我无法访问包中的DRL文件。我也是这么想的。我的项目规则的层次结构是这样的 我尝试使用以下代码访问DRL文件: 导致错误:

  • 本文向大家介绍JS严格模式知识点总结,包括了JS严格模式知识点总结的使用技巧和注意事项,需要的朋友参考一下 所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict” 如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以只在函数中打开严格模式 1.严格模式下没有全局变量 a="test" 严格模式下会报错,非严格模式下正常 2.删除变量 var 有三种声明的情形 v

  • 我创建了一个基本的.NET framework MVC web应用程序,并添加了使用Cloud Watch logs SDK向AWS Cloud Watch logs发送日志的逻辑,它在LocalSystem/LocalHost中运行良好,但当我对映像进行对接时,就开始出现异常。请指导我解决这个问题。 Amazon.Runtime.AmazonServiceException:“引发了状态为Nam

  • 假设我有一个抽象类,它有一个具体的方法和三个抽象方法、和... ...并且被一个具体的类 现在,假设我有第二个子类,它可以在和中抛出一个选中的异常 我想使用以下这些类: 显然,这不起作用,因为中的方法没有声明任何异常。 如何在实现类中抛出任意异常?有没有一种方法不需要使用声明并且总是必须使用try-catch来实现它?我还想避免将中的通用逻辑复制到它的子类中。这里最好的解决方案是什么?对此有更好的

  • 我有一个包含OClass对象的列表。我想创建这个对象的JSON。下面是我的代码: com.fasterxml.jackson.databind.jsonMappingException:未发现用于com.ontotext.trree.owlim_ext.r类的序列化程序,也未发现用于创建BeanSerializer的属性(为了避免异常,禁用serializationconfig.serializa