Chapter 57. The Interceptor APIs
Abstract
Interceptors implement the PhaseInterceptor interface which extends the base Interceptor interface. This interface defines a number of methods used by the Apache CXF’s runtime to control interceptor execution and are not appropriate for application developers to implement. To simplify interceptor development, Apache CXF provides a number of abstract interceptor implementations that can be extended.
Interfaces
All of the interceptors in Apache CXF implement the base Interceptor interface shown in Example 57.1, “Base interceptor interface”.
Example 57.1. Base interceptor interface
package org.apache.cxf.interceptor;
public interface Interceptor<T extends Message>
{
void handleMessage(T message) throws Fault;
void handleFault(T message);
}The Interceptor interface defines the two methods that a developer needs to implement for a custom interceptor:
- handleMessage()
-
The
handleMessage()method does most of the work in an interceptor. It is called on each interceptor in a message chain and receives the contents of the message being processed. Developers implement the message processing logic of the interceptor in this method. For detailed information about implementing thehandleMessage()method, see Section 59.2, “Processing messages”. - handleFault()
-
The
handleFault()method is called on an interceptor when normal message processing has been interrupted. The runtime calls thehandleFault()method of each invoked interceptor in reverse order as it unwinds an interceptor chain. For detailed information about implementing thehandleFault()method, see Section 59.3, “Unwinding after an error”.
Most interceptors do not directly implement the Interceptor interface. Instead, they implement the PhaseInterceptor interface shown in Example 57.2, “The phase interceptor interface”. The PhaseInterceptor interface adds four methods that allow an interceptor the participate in interceptor chains.
Example 57.2. The phase interceptor interface
package org.apache.cxf.phase;
...
public interface PhaseInterceptor<T extends Message> extends Interceptor<T>
{
Set<String> getAfter();
Set<String> getBefore();
String getId();
String getPhase();
}Abstract interceptor class
Instead of directly implementing the PhaseInterceptor interface, developers should extend the AbstractPhaseInterceptor class. This abstract class provides implementations for the phase management methods of the PhaseInterceptor interface. The AbstractPhaseInterceptor class also provides a default implementation of the handleFault() method.
Developers need to provide an implementation of the handleMessage() method. They can also provide a different implementation for the handleFault() method. The developer-provided implementations can manipulate the message data using the methods provided by the generic org.apache.cxf.message.Message interface.
For applications that work with SOAP messages, Apache CXF provides an AbstractSoapInterceptor class. Extending this class provides the handleMessage() method and the handleFault() method with access to the message data as an org.apache.cxf.binding.soap.SoapMessage object. SoapMessage objects have methods for retrieving the SOAP headers, the SOAP envelope, and other SOAP metadata from the message.

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.