分析笔记: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.xml
的FilterDispatcher
是被去掉了。
此时访问service:
$ http localhost:8080/inject
可以看见ResteasyDeplomentImpl
的断点被触发:
而且从上面可以看见ResteasyContext.getContextDataMap()
里面得到的数据为「0」,说明此时context
并没有被注入。
上面对应的是SpringBeanProcessor
的初始化过程:
ResteasyDeploymentImpl
直接使用SynchronousDispatcher
:
处理每次请求的是ResteasyHandlerAdapter
:
ResteasyHandlerAdapter
是每次处理请求的class:
其中handle()
方法是用来处理每次请求的:
在上面的流程当中,没有注入context
的地方。