繁体   English   中英

jax-rs Apache CXF,在拦截器之间传输数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM