WildFly24+Zulu11部署应用报RESTEASY003880错误如何解决
问题描述
浏览器访问应用登录页面时抛出异常,应用部署环境为 Zulu OpenJDK 11、WildFly 24,异常栈信息如下:
org.jboss.resteasy.spi.LoggableFailure: RESTEASY003880: Unable to find contextual data of type: javax.servlet.http.HttpServletRequest at org.jboss.resteasy.resteasy-jaxrs@3.15.1.Final//org.jboss.resteasy.core.ContextParameterInjector$GenericDelegatingProxy.invoke(ContextParameterInjector.java:77) at javax.servlet.api@2.0.0.Final//com.sun.proxy.$Proxy163.getSession(Unknown Source) at deployment.demo.ear.rest.war//com.demoapp.demo.rest.resources.Myclass.init(Myclass.java:107)
根因分析
- 报错本质是RESTEasy无法为当前执行线程绑定
javax.servlet.http.HttpServletRequest类型的请求上下文数据。从栈轨迹可以定位到异常触发点是Myclass类的init方法第107行,该行调用了注入的request对象的getSession()方法。 - 90%以上的同类型报错都是使用方式错误导致:将
@Context HttpServletRequest声明为REST资源类的成员变量,且在类初始化阶段(构造函数、@PostConstruct标注的初始化方法)就直接调用该代理对象的方法。RESTEasy注入的HttpServletRequest是代理对象,只有在实际处理HTTP请求的请求线程生命周期内,代理才会关联真实的请求数据;容器实例化资源类、执行初始化逻辑的阶段没有任何HTTP请求进入,自然无法获取上下文数据。 - 剩余少见触发场景:
- 资源类被手动配置为全局单例且容器启动时就提前实例化,完全脱离请求作用域
- 自定义拦截器/过滤器执行优先级配置错误,在请求上下文未加载完成时就触发了资源类的逻辑调用
- 异步请求场景下未做上下文传递,在自定义子线程中直接调用注入的request代理对象
修复方案
- 优先修正代码使用逻辑:禁止在构造函数、
@PostConstruct初始化方法中调用@Context注入的request代理的任何方法,将request.getSession()这类依赖真实请求的逻辑,移动到@GET/@POST等标注的实际请求处理方法内执行。
错误示例(对应当前报错的写法):
修正后写法:@Path("/auth") public class Myclass { @Context private HttpServletRequest request; private HttpSession session; @PostConstruct public void init() { // 初始化阶段无请求上下文,该行直接触发报错 this.session = request.getSession(); } }@Path("/auth") public class Myclass { @Context private HttpServletRequest request; @GET @Path("/login") public Response toLoginPage() { // 请求处理阶段上下文已完成绑定,可正常调用 HttpSession session = request.getSession(); // 登录页业务逻辑 return Response.ok("login page").build(); } } - 如果需要在过滤器、拦截器中使用请求对象,直接使用拦截方法入参传入的原生
HttpServletRequest对象,不要调用类层面注入的request代理。 - 若使用了异步处理逻辑,不要在异步子线程中直接访问注入的request代理,需要在提交异步任务前从当前请求线程取出需要的上下文数据,作为参数传入异步任务使用。
- 检查WildFly配置与JAX-RS资源类注解,不要给REST资源类加
@Singleton等会改变默认请求作用域的注解,也不要在WildFly的RESTEasy子系统配置中开启资源类提前初始化的选项。
内容的提问来源于stack exchange,提问作者b n
相关产品推荐
相关产品推荐

