56장. Interceptor API

초록

인터셉터는 기본 인터셉터 인터페이스를 확장하는 PhaseInterceptor 인터페이스를 구현합니다. 이 인터페이스는 Apache CXF 런타임에서 인터셉터 실행을 제어하기 위해 사용하는 여러 방법을 정의하고 애플리케이션 개발자가 구현하는 데 적합하지 않습니다. 인터셉터 개발을 단순화하기 위해 Apache CXF는 확장 가능한 여러 추상 인터셉터 구현을 제공합니다.

56.1. 인터페이스

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. “phase 인터셉터 인터페이스” 에 표시된 단계 Interceptor 인터페이스를 구현합니다. phaseInterceptor 인터페이스는 인터셉터 체인에 참여할 수 있는 네 가지 방법을 추가합니다.

예 56.2. phase 인터셉터 인터페이스

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

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

    Set<String> getAfter();

    Set<String> getBefore();

    String getId();

    String getPhase();

}

56.2. 추상 인터셉터 클래스

phaseInterceptor 인터페이스를 직접 구현하는 대신 개발자는 AbstractPhaseInterceptor 클래스를 확장해야합니다. 이 추상 클래스는 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 메타데이터를 검색하는 방법이 있습니다.