阿男的小窝

View the Project on GitHub

分析笔记:RESTEASY-828 Issue with injected ServletContext in Resteasy/SpringMVC setup

分析问题:

启动调试模式:

$ export MAVEN_OPTS='-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'

启动服务器:

$ mvn jetty:run

web.xml当中的FilterDispatcher配置:

加载FilterDispatcher的过程:

流程:

此时的servletContext

以上是FilterDispatcher的加载过程,全过程没有问题(spring初始化过程中把resteasy的组件都按配置创建好了)。

所以,去掉配置中的FilterDispatcher

然后重启服务,服务此时可以完全启动:

所以可以验证web.xmlFilterDispatcher是被去掉了。

此时访问service:

$ http localhost:8080/inject

可以看见ResteasyDeplomentImpl的断点被触发:

而且从上面可以看见ResteasyContext.getContextDataMap()里面得到的数据为「0」,说明此时context并没有被注入。

上面对应的是SpringBeanProcessor的初始化过程:

ResteasyDeploymentImpl直接使用SynchronousDispatcher

处理每次请求的是ResteasyHandlerAdapter

ResteasyHandlerAdapter是每次处理请求的class:

其中handle()方法是用来处理每次请求的:

在上面的流程当中,没有注入context的地方。