分析笔记: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的过程:

流程:
.jpg)
此时的servletContext:

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

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

所以可以验证web.xml的FilterDispatcher是被去掉了。
此时访问service:
$ http localhost:8080/inject
可以看见ResteasyDeplomentImpl的断点被触发:

而且从上面可以看见ResteasyContext.getContextDataMap()里面得到的数据为「0」,说明此时context并没有被注入。
上面对应的是SpringBeanProcessor的初始化过程:

ResteasyDeploymentImpl直接使用SynchronousDispatcher:

处理每次请求的是ResteasyHandlerAdapter:

ResteasyHandlerAdapter是每次处理请求的class:

其中handle()方法是用来处理每次请求的:
.jpg)
在上面的流程当中,没有注入context的地方。