2

2つの迎撃機を持ってみましょう。での入力インターセプター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);
   }  

そして今、私は知りたいです:この2つのフェーズの間に何回ありましたか?BeforeInterceptorを
呼び出し、この値をに変換し、interceptorの後に呼び出す必要があります。 System.currentTimeMillis();AfterInterceptor
System.currentTimeMillis() - valueFromBeforeInterceptor

しかし、あるインターセプターから別のインターセプターにデータを転送するにはどうすればよいですか?

4

1 に答える 1

5

同じチェーン内にある2つのインターセプター(つまり、2つの「in」インターセプターまたは2つの「out」インターセプター)間でデータを渡すために、任意の値を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パッケージスタイルの階層名を使用するなどして、他のインターセプターと衝突しないことが確実なキーを選択することをお勧めします。

于 2012-11-01T11:22:21.820 に答える