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
相关产品推荐
相关产品推荐

