Ily*_*lya 2 java rest cxf interceptor
我们有两个拦截器.输入拦截器Phase.RECEIVE和输出拦截器Phase.SETUP_ENDING
public class BeforeInterceptor extends AbstractPhaseInterceptor<Message>
{
public BeforeInterceptor()
{
super(Phase.RECEIVE);
}
Run Code Online (Sandbox Code Playgroud)
和
public class AfterInterceptor extends AbstractPhaseInterceptor<Message>
{
public AfterInterceptor()
{
super(Phase.SETUP_ENDING);
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道:这两个阶段之间有多少时间?
我必须调用System.currentTimeMillis();BeforeInterceptor,将此值转换为AfterInterceptor,并
System.currentTimeMillis() - valueFromBeforeInterceptor在拦截器后调用.
但是如何从另一个拦截器传输数据呢?
要在同一链中的两个拦截器之间传递数据(即两个"in"拦截器或两个"out"拦截器),您可以在 Message
// BeforeInterceptor
message.put("com.example.MyApp.startTime", System.currentTimeMillis());
// AfterInterceptor
long totalTime = System.currentTimeMillis() -
(Long)message.get("com.example.MyApp.startTime");
Run Code Online (Sandbox Code Playgroud)
如果一个拦截器位于"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");
Run Code Online (Sandbox Code Playgroud)
无论您使用哪一个,最好选择您确定不会与任何其他拦截器冲突的密钥,例如使用Java包式分层名称.