2012-11-01 81 views
2

讓我們有兩個攔截器。輸入攔截在Phase.RECEIVE和輸出攔截在Phase.SETUP_ENDINGjax-rs Apache CXF,攔截器之間傳輸數據

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

但我怎樣才能從一個攔截器傳輸數據?

回答

4

通過,在同一個鏈中的兩個攔截器之間的數據(即,兩個「中的」攔截或兩個「外」攔截器)可以存儲關於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包式分層名稱。

+0

謝謝!效果很好 – Ilya