Jersey里面对message body reader/writer的匹配,以及对tracing logger的相关实现
ReaderInterceptorExecutor
里面的proceed(...)
方法对MsgTraceEvent.RI_BEFORE
和RI_AFTER
的使用:
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed().png
下面是ReaderInterceptorExecutor
的class diagram:
可以看到它包含一个inner class叫做TerminalReaderInterceptor
,这个class里面的aroundReadFrom(...)
方法还包含了MsgTraceEvent.MBR_FIND
的记录:
所以说,实现这些和reader/writer/interceptor相关tracing events的工作,是个细致活,有很多地方要加入tracing events进行记录。
RESTEasy这边各个classes里面的aroundReadFrom(...)
方法都是传入ReaderInterceptorContext
的instance:
ReaderInterceptorContext
的通用实现是AbstractReaderInterceptorContext
,它里面的proceed()
方法是需要tracing的地方:
AbstractReaderInterceptorContext
有两个扩展classes,分别是ClientReaderInterceptorContext
和ServerReaderInterceptorContext
:
其中ServerReaderInterceptorContext
含有HttpRequest
:
client这边不含HttpRequest
,可以后续考虑专门的机制来获取tracing logger。
回到Jersey这边,以下是InterceptorExecutor
的class diagram:
在InterceptorExecutor
当中,可以看到对tracing logger的使用方法:
上面的方法被用在ReaderInterceptorExecutor
和WriterInterceptorExecutor
的proceed(...)
方法当中:
RESTEasy这边的内部接口设计与实现完全不同,需要独立考虑。