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

Drools升级至9.44后KieServices.Factory.get()返回空问题排查

Drools 9.44升级后单元测试中KieServices.Factory.get()返回空值排查问题
  • 我将老旧Drools项目升级至9.44版本,编写单元测试验证规则类时遇到问题:自定义工具方法getKieContainerFromStream中,KieServices.Factory.get()返回空值,直接导致测试崩溃。
  • 对比示例代码KieServices.Factory.get().getKieClasspathContainer()可正常运行,无空指针异常。
  • 将自有工具方法放入示例项目测试,仍出现Factory.get()返回空的情况;但为示例代码里的PricingRuleDTExample编写单元测试却能正常运行。
  • 修改自有方法为直接返回KieServices.Factory.get().getKieClasspathContainer()时,又可成功拿到结果。
  • 疑惑点:为何对KieServices.Factory.get()的返回值添加后续方法调用,反而能让它不再返回空?请求排查问题原因。

相关代码如下:

// 待测试方法
public static KieContainer getKieContainerFromStream(InputStream is){
    KieServices kieServices = KieServices.Factory.get();
    Resource resource = ResourceFactory.newInputStreamResource(is);
    KieFileSystem kieFileSystem = kieServices.newKieFileSystem().write(resource);
    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
    kieBuilder.buildAll();
    KieRepository kieRepository = kieServices.getRepository();
    ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId();
    KieContainer result = kieServices.newKieContainer(krDefaultReleaseId);
    return result;
}

// 单元测试代码
InputStream is = getClass().getClassLoader().getResourceAsStream(POSTPONE_RULES);
KieContainer kieContainer = DroolsUtil.getKieContainerFromStream(is);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:51:02