搜索

第 56 章 Interceptor API

download PDF

摘要

拦截器实施阶段拦截器接口,该接口扩展了 base Interceptor 接口。此界面定义了很多 Apache CXF 运行时用来控制拦截器执行的方法,且不适用于应用开发人员实施。为了简化拦截器开发,Apache CXF 提供了很多可以扩展的抽象拦截器实现。

接口

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

例 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 类,而不是直接实施阶段拦截器接口。此抽象类为阶段拦截器接口的阶段管理方法提供了实现。AbstractPhaseInterceptor 类还提供 handleFault () 方法的默认实现。

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.