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

AEM Servlet的JUnit5测试出现Resource resolver已关闭异常

AEM JUnit5测试ResourceResolver已关闭异常的解决办法
  • 不要手动关闭ResourceResolver
    AEM测试上下文(如AemContext)会自动接管ResourceResolver的生命周期,测试完成后统一回收资源。如果代码中手动调用resourceResolver.close(),会导致框架后续清理时发现资源已被关闭,抛出异常。检查Servlet及测试代码,移除所有手动关闭的逻辑。

  • 通过测试上下文正确获取ResourceResolver
    必须使用测试上下文提供的aemContext.resourceResolver()方法获取实例,禁止自行创建ResourceResolver。自行创建的实例不受上下文生命周期管理,极易引发资源冲突。

  • 避免断言后操作ResourceResolver
    测试响应验证通过后,不要再调用ResourceResolver的任何方法。此时测试上下文已进入资源清理阶段,ResourceResolver处于待关闭状态,后续操作必然触发异常。

  • 清理Servlet中的残留引用
    检查Servlet代码,确保没有在doGet/doPost等请求处理方法之外持有ResourceResolver的引用(比如存在成员变量中)。这类残留引用会在测试结束后,于框架回收资源时引发操作冲突。

错误与正确代码示例

错误示例(手动关闭)

ResourceResolver resolver = aemContext.resourceResolver();
try {
    // 业务逻辑处理
} finally {
    resolver.close(); // 手动关闭导致后续框架报错
}

正确示例(上下文管理)

ResourceResolver resolver = aemContext.resourceResolver();
// 直接使用资源解析器处理业务
// 无需手动关闭,测试上下文会自动回收

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:35:28