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절. “오류 후 축소 해제” 을 참조하십시오.
대부분의 인터셉터는 인터셉터 인터페이스를 직접 구현하지 않습니다. 대신 예 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(); }
56.2. 추상 인터셉터 클래스
PhaseInterceptor 인터페이스를 직접 구현하는 대신 개발자는 AbstractPhaseInterceptor
클래스를 확장해야합니다. 이 추상 클래스는 PhaseInterceptor 인터페이스의 단계 관리 메서드에 대한 구현을 제공합니다. AbstractPhaseInterceptor
클래스는 handleFault()
메서드의 기본 구현도 제공합니다.
개발자는 handleMessage()
메서드 구현을 제공해야 합니다. 또한 handleFault()
메서드에 대해 다른 구현을 제공할 수 있습니다. 개발자 제공 구현은 일반 org.apache.cxf.message.Message 인터페이스에서 제공하는 방법을 사용하여 메시지 데이터를 조작할 수 있습니다.
Cryostat 메시지와 함께 작동하는 애플리케이션의 경우 Apache CXF는 AbstractSoapInterceptor
클래스를 제공합니다. 이 클래스를 확장하면 handleMessage()
메서드와 handleFault()
메서드를 org.apache.cxf.binding.soap.SoapMessage
오브젝트로 메시지 데이터에 액세스할 수 있습니다. SoapMessage
오브젝트에는 message에서 Cryostat 헤더, Cryostat 및 기타 Cryostat 메타데이터를 검색하는 방법이 있습니다.