【问题标题】:jax-rs Apache CXF, transfer data between interceptorsjax-rs Apache CXF,在拦截器之间传输数据
【发布时间】:2012-11-01 10:11:13
【问题描述】:

让我有两个拦截器。输入拦截器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);
   }  

现在我想知道:这两个阶段之间有多少时间?
我必须在 BeforeInterceptor 中调用System.currentTimeMillis();,将这个值传递给AfterInterceptor,然后在拦截器之后调用
System.currentTimeMillis() - valueFromBeforeInterceptor

但是我怎样才能将数据从一个拦截器传输到另一个拦截器呢?

【问题讨论】:

    标签: java rest cxf interceptor


    【解决方案1】:

    要在同一链中的两个拦截器(即两个“输入”拦截器或两个“输出”拦截器)之间传递数据,您可以在 Message 上存储任意值

    // BeforeInterceptor
    message.put("com.example.MyApp.startTime", System.currentTimeMillis());
    
    // AfterInterceptor
    long totalTime = System.currentTimeMillis() -
       (Long)message.get("com.example.MyApp.startTime");
    

    如果一个拦截器在“in”链中,而另一个在“out”链中,那么您可以将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 包样式的分层名称。

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 1970-01-01
      • 2013-06-09
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2014-09-11
      相关资源
      最近更新 更多