You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java集成测试调用Drools规则时报空指针异常该如何解决

问题排查及修复方案

1. 测试类未加载Spring上下文导致空指针

你抛出空指针的核心原因是JUnit测试类没有加Spring测试相关注解,@Autowired注入的GrievanceRuleService、KieContainer全为null,调用方法时自然触发NPE。
修复方式:在测试类上添加注解,加载你写的配置类:

@SpringBootTest
// 非SpringBoot项目可替换为:
// @RunWith(SpringRunner.class)
// @ContextConfiguration(classes = RuleConfiguration.class)
public class RuleTest {
    // 原有测试代码不变
}

2. KieContainer配置的规则文件路径错误

你配置的规则文件路径/src/main/resources/drools/GrievanceRules.drl不符合类路径加载规则:src/main/resources目录下的内容编译后会直接放在类路径根目录,不需要前缀。
修复方式:修改路径配置:

public static final String grivFile = "drools/GrievanceRules.drl";

3. DRL规则语法不规范,可能触发规则匹配失败

Drools规则LHS(条件部分)无需手动调用get方法,直接写属性名即可,且你的写法如果category为null会额外触发空指针,建议调整规则条件写法:

rule "grievancesMap_10"
    when
        $grievances:GrievanceDTO("NA".equals(category))
    then
        $grievances.setServiceType("Timely Access");
end

同时确认你构造GrievanceDTO的参数顺序和字段对应正确:你提到第三个字段是serviceType、第四个是category,你构造时第四个参数传的是"NA",符合规则匹配条件,参数顺序没问题。

4. 包扫描范围校验

检查你的GrievanceRuleService所在包是否在RuleConfiguration配置的@ComponentScan("dm.vantage.producer.service")扫描范围内,如果不在请调整扫描路径,否则Spring不会创建GrievanceRuleService的Bean,也会导致注入失败。

内容的提问来源于stack exchange,提问作者cluis92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:45:00