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 메타데이터를 검색하는 방법이 있습니다.