CXF interceptor拦截顺序

本文详细介绍了Apache CXF框架中CXFInterceptor的Phase执行顺序。包括了输入(inPhases)和输出(outPhases)阶段的具体流程,并解释了当两个Phase具有相同优先级时如何确定执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java代码   收藏代码
  1. org.apache.cxf.phase.PhaseManagerImpl中  
  2. final void createInPhases() {  
  3.         int i = 0;  
  4.   
  5.         inPhases = new SortedArraySet<Phase>();  
  6.         inPhases.add(new Phase(Phase.RECEIVE, ++i * 1000));  
  7.         inPhases.add(new Phase(Phase.PRE_STREAM, ++i * 1000));  
  8.         inPhases.add(new Phase(Phase.USER_STREAM, ++i * 1000));  
  9.         inPhases.add(new Phase(Phase.POST_STREAM, ++i * 1000));  
  10.         inPhases.add(new Phase(Phase.READ, ++i * 1000));  
  11.         inPhases.add(new Phase(Phase.PRE_PROTOCOL, ++i * 1000));  
  12.         inPhases.add(new Phase(Phase.USER_PROTOCOL, ++i * 1000));  
  13.         inPhases.add(new Phase(Phase.POST_PROTOCOL, ++i * 1000));  
  14.         inPhases.add(new Phase(Phase.UNMARSHAL, ++i * 1000));  
  15.         inPhases.add(new Phase(Phase.PRE_LOGICAL, ++i * 1000));  
  16.         inPhases.add(new Phase(Phase.USER_LOGICAL, ++i * 1000));  
  17.         inPhases.add(new Phase(Phase.POST_LOGICAL, ++i * 1000));  
  18.         inPhases.add(new Phase(Phase.PRE_INVOKE, ++i * 1000));  
  19.         inPhases.add(new Phase(Phase.INVOKE, ++i * 1000));  
  20.         inPhases.add(new Phase(Phase.POST_INVOKE, ++i * 1000));  
  21.     }  
  22.   
  23.     final void createOutPhases() {  
  24.   
  25.         outPhases = new SortedArraySet<Phase>();  
  26.         int i = 0;  
  27.   
  28.         outPhases.add(new Phase(Phase.SETUP, ++i * 1000));  
  29.         outPhases.add(new Phase(Phase.PRE_LOGICAL, ++i * 1000));  
  30.         outPhases.add(new Phase(Phase.USER_LOGICAL, ++i * 1000));  
  31.         outPhases.add(new Phase(Phase.POST_LOGICAL, ++i * 1000));  
  32.         outPhases.add(new Phase(Phase.PREPARE_SEND, ++i * 1000));  
  33.   
  34.         outPhases.add(new Phase(Phase.PRE_STREAM, ++i * 1000));  
  35.   
  36.         outPhases.add(new Phase(Phase.PRE_PROTOCOL, ++i * 1000));  
  37.   
  38.         outPhases.add(new Phase(Phase.WRITE, ++i * 1000));  
  39.         outPhases.add(new Phase(Phase.PRE_MARSHAL, ++i * 1000));  
  40.         outPhases.add(new Phase(Phase.MARSHAL, ++i * 1000));  
  41.         outPhases.add(new Phase(Phase.POST_MARSHAL, ++i * 1000));  
  42.   
  43.         outPhases.add(new Phase(Phase.USER_PROTOCOL, ++i * 1000));  
  44.         outPhases.add(new Phase(Phase.POST_PROTOCOL, ++i * 1000));  
  45.   
  46.         outPhases.add(new Phase(Phase.USER_STREAM, ++i * 1000));  
  47.         outPhases.add(new Phase(Phase.POST_STREAM, ++i * 1000));  
  48.   
  49.         outPhases.add(new Phase(Phase.SEND, ++i * 1000));  
  50.   
  51.         //Make sure ending interceptors are put in positions symmetric  
  52.         // to their starting interceptors  
  53.         outPhases.add(new Phase(Phase.SEND_ENDING, ++i * 1000));  
  54.           
  55.         outPhases.add(new Phase(Phase.POST_STREAM_ENDING, ++i * 1000));  
  56.         outPhases.add(new Phase(Phase.USER_STREAM_ENDING, ++i * 1000));  
  57.   
  58.         outPhases.add(new Phase(Phase.POST_PROTOCOL_ENDING, ++i * 1000));  
  59.         outPhases.add(new Phase(Phase.USER_PROTOCOL_ENDING, ++i * 1000));  
  60.   
  61.         outPhases.add(new Phase(Phase.MARSHAL_ENDING, ++i * 1000));  
  62.         outPhases.add(new Phase(Phase.WRITE_ENDING, ++i * 1000));  
  63.   
  64.         outPhases.add(new Phase(Phase.PRE_PROTOCOL_ENDING, ++i * 1000));  
  65.           
  66.         outPhases.add(new Phase(Phase.PRE_STREAM_ENDING, ++i * 1000));  
  67.   
  68.         outPhases.add(new Phase(Phase.PREPARE_SEND_ENDING, ++i * 1000));  
  69.         outPhases.add(new Phase(Phase.POST_LOGICAL_ENDING, ++i * 1000));  
  70.         outPhases.add(new Phase(Phase.USER_LOGICAL_ENDING, ++i * 1000));  
  71.         outPhases.add(new Phase(Phase.PRE_LOGICAL_ENDING, ++i * 1000));  
  72.         outPhases.add(new Phase(Phase.SETUP_ENDING, ++i * 1000));  
  73.   
  74.     }  

 

另外,如果级别一样,则按照配置的先后顺序进行拦截。顺序是<javaxws:interceptors></javaxws:interceptors>标签内出现的顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值