57.2. 指定拦截器的阶段


概述

拦截器分为几个阶段。拦截器的阶段决定了它所调用的消息处理序列中的时间。开发人员指定拦截器它的构造器。使用框架提供的常量值来指定阶段。

阶段

阶段是拦截器的逻辑集合。如 图 57.1 “一个拦截器阶段” 所示,阶段中的拦截器会按顺序调用。

图 57.1. 一个拦截器阶段

拦截器将一起链接到各个阶段。

这些阶段以排序列表中链接在一起,组成拦截器链,并在消息处理过程中提供定义的逻辑步骤。例如,入站拦截器链的 RECEIVE 阶段组使用原始消息数据从线路获取时会处理传输级别详情。

然而,这里没有执行任何阶段可以执行的操作。建议在阶段内拦截器遵循阶段要编写的任务。

Apache CXF 定义的阶段完整列表可在 第 62 章 Apache CXF 消息处理阶段 中找到。

指定阶段

Apache CXF 提供 org.apache.cxf.Phase 类来指定阶段。类是常量的集合。Apache CXF 定义的每个阶段在 阶段 类都有一个相应的常量。例如,RECEIVE 阶段由 value Phase.RECEIVE 指定。

设置阶段

拦截器的阶段在拦截器的构造器中设置。AbstractPhaseInterceptor 类定义了三个构造器用于实例化拦截器:

  • 公共 AbstractPhaseInterceptor(String phase)- 将拦截器的阶段设置为指定阶段,并将拦截器的 id 设置为拦截器的类名称。

    此构造器将满足大多数用例。

  • 公共 AbstractPhaseInterceptor(String id, String phase)- 将拦截器的 id 设置为在第一个参数传递的字符串,以及拦截器阶段到第二个字符串。
  • 公共 AbstractPhaseInterceptor(String phase, boolean uniqueId)- 表示拦截器是否应使用唯一系统生成的 id。如果 uniqueId 参数为 true,则拦截器的 id 将由系统计算。如果 uniqueId 参数为 false,则拦截器的 id 设置为拦截器的类名称。

设置自定义拦截器的阶段的建议方法是使用 super() 方法将阶段传递给 AbstractPhaseInterceptor 构造器,如 例 57.1 “设置拦截器的阶段” 所示。

例 57.1. 设置拦截器的阶段

import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class StreamInterceptor extends AbstractPhaseInterceptor<Message>
 {

    public StreamInterceptor()
   {
     super(Phase.PRE_STREAM);
    }
}

例 57.1 “设置拦截器的阶段” 中显示的 StreamInterceptor 拦截器被放入 PRE_STREAM 阶段。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.