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

Drools从7.33.0升级至7.60.0时遇Stream Closed Exception求助

Drools升级后"Stream Closed"异常解决方法

问题根源

你在调用kfs.write()后立即关闭了FileInputStream,但Drools 7.60.0版本的KieBuilder.buildAll()会延迟读取资源流,此时流已关闭,导致IO异常。旧版本7.33.0可能是立即读取并缓存了流内容,所以提前关闭流不会有问题,但新版本的资源加载逻辑发生了变化。

解决方案

方案1:用try-with-resources自动管理流生命周期

利用Java的try-with-resources语法,确保流在buildAll()执行完成后才被关闭:

KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();

try (FileInputStream fis = new FileInputStream(fileEntry.getPath())) {
    kfs.write("src/main/resources/" + fileEntry.getName(), kieServices.getResources().newInputStreamResource(fis));
    KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
} catch (IOException e) {
    e.printStackTrace();
}

方案2:改用FileResource替代InputStreamResource

直接通过文件路径创建FileResource,由Drools内部管理文件读取,无需手动处理流:

KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
kfs.write("src/main/resources/" + fileEntry.getName(), kieServices.getResources().newFileResource(fileEntry.getPath()));
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:48:24