搜索

第 56 章 Interceptor API

download PDF

摘要

拦截器实施 PhaseInterceptor 接口,它扩展了基本拦截器接口。此接口定义了 Apache CXF 运行时用来控制拦截器执行的许多方法,不适用于应用程序开发人员实施。为简化拦截器开发,Apache CXF 提供了很多可扩展的抽象拦截器实现。

接口

Apache CXF 中的所有拦截器都实现 例 56.1 “基本拦截器接口” 中显示的基本 Interceptor 接口。

例 56.1. 基本拦截器接口

package org.apache.cxf.interceptor;

public interface Interceptor<T extends Message>
{

  void handleMessage(T message) throws Fault;

  void handleFault(T message);

}

Interceptor 接口定义了开发人员为自定义拦截器实施的两种方法:

handleMessage()
handleMessage () 方法在拦截器中执行大多数工作。它在策略链中的每个拦截器上调用,并接收正在处理的消息的内容。开发人员在此方法中实施拦截器的消息处理逻辑。有关实现 handleMessage () 方法的详情,请参考 第 58.2 节 “处理消息”
handleFault()
当正常消息处理中断时,在拦截器上调用 handleFault () 方法。运行时会调用每个调用的拦截器的 handleFault () 方法,因为它取消了拦截器链。有关实现 handleFault () 方法的详情,请参考 第 58.3 节 “出错后取消卷”

大多数拦截器不直接实现 Interceptor 接口。相反,它们实现了 例 56.2 “阶段拦截器接口” 中显示的 PhaseInterceptor 接口。PhaseInterceptor 接口添加了四个允许拦截器链的方法。

例 56.2. 阶段拦截器接口

package org.apache.cxf.phase;
...

public interface PhaseInterceptor<T extends Message> extends Interceptor<T>
{

    Set<String> getAfter();

    Set<String> getBefore();

    String getId();

    String getPhase();

}

抽象拦截器类

开发人员应扩展 AbstractPhaseInterceptor 类,而不是直接实现 PhaseInterceptor 接口。这个抽象类为 PhaseInterceptor 接口的阶段管理方法提供实施。AbstractPhaseInterceptor 类也提供 handleFault () 方法的默认实现。

开发人员需要提供 handleMessage () 方法的实施。它们也可以为 handleFault () 方法提供不同的实现。开发者提供的实现可以使用通用 org.apache.cxf.message.Message 接口提供的方法操作消息数据。

对于使用 SOAP 消息的应用程序,Apache CXF 提供了一个 AbstractSoapInterceptor 类。扩展此类提供了 handleMessage () 方法和 handleFault () 方法,作为 org.apache.cxf.binding.soap.SoapMessage 对象访问消息数据。SoapMessage 对象有从消息中检索 SOAP 标头、SOAP 信封和其他 SOAP 元数据的方法。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.