[英]jax-rs Apache CXF, transfer data between interceptors
我有两个拦截器。 输入拦截在Phase.RECEIVE
和输出拦截在Phase.SETUP_ENDING
public class BeforeInterceptor extends AbstractPhaseInterceptor<Message>
{
public BeforeInterceptor()
{
super(Phase.RECEIVE);
}
和
public class AfterInterceptor extends AbstractPhaseInterceptor<Message>
{
public AfterInterceptor()
{
super(Phase.SETUP_ENDING);
}
现在我想知道:这两个阶段之间有多少时间?
我必须调用System.currentTimeMillis();
在BeforeInterceptor中,将此值转换为AfterInterceptor
,然后调用
System.currentTimeMillis() - valueFromBeforeInterceptor
拦截器之后的System.currentTimeMillis() - valueFromBeforeInterceptor
。
但是,如何从一个拦截器传输数据呢?
要在同一链中的两个拦截器(即两个“进”拦截器或两个“出”拦截器)之间传递数据,可以在Message
存储任意值
// BeforeInterceptor
message.put("com.example.MyApp.startTime", System.currentTimeMillis());
// AfterInterceptor
long totalTime = System.currentTimeMillis() -
(Long)message.get("com.example.MyApp.startTime");
如果一个拦截器位于“进入”链中,而另一个拦截器位于“出”链中,则可以出于相同目的使用Exchange
:
// BeforeInterceptor
inMessage.getExchange().put("com.example.MyApp.startTime", System.currentTimeMillis());
// AfterInterceptor
long totalTime = System.currentTimeMillis() -
(Long)outMessage.getExchange().get("com.example.MyApp.startTime");
无论您使用哪种,最好选择您确定不会与其他任何拦截器冲突的键,例如,使用Java包样式的层次结构名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.