59.3.2. 인터셉터 공급자 API 사용
59.3.2.1. 개요
인터셉터는 인터셉터 공급자 인터페이스 에 표시된 InterceptorProvider 인터페이스를 구현하는 모든 구성 요소로 등록할 수 있습니다.
인터셉터 공급자 인터페이스
package org.apache.cxf.interceptor; import java.util.List; public interface InterceptorProvider { List<Interceptor<? extends Message>> getInInterceptors(); List<Interceptor<? extends Message>> getOutInterceptors(); List<Interceptor<? extends Message>> getInFaultInterceptors(); List<Interceptor<? extends Message>> getOutFaultInterceptors(); }
인터페이스의 네 가지 방법을 사용하면 각 엔드포인트의 인터셉터 체인을 Java List
오브젝트로 검색할 수 있습니다. 개발자는 Java List
오브젝트에서 제공하는 방법을 사용하여 모든 체인에 인터셉터를 추가하고 제거할 수 있습니다.
59.3.2.2. 절차
InterceptorProvider API를 사용하여 런타임 구성 요소의 인터셉터 체인에 인터셉터를 연결하려면 다음을 수행해야 합니다.
인터셉터를 연결할 체인으로 런타임 구성 요소에 대한 액세스 권한을 가져옵니다.
개발자는 Apache CXF 특정 API를 사용하여 표준 Java 애플리케이션 코드에서 런타임 구성 요소에 액세스해야 합니다. 일반적으로 런타임 구성 요소는 JAX-WS 또는 JAX-RS 아티팩트를 기본 Apache CXF 개체로 캐스팅하여 액세스할 수 있습니다.
- 인터셉터의 인스턴스를 생성합니다.
- 적절한 get 방법을 사용하여 원하는 인터셉터 체인을 검색합니다.
List
오브젝트의add()
메서드를 사용하여 인터셉터를 인터셉터 체인에 연결합니다.이 단계는 일반적으로 인터셉터 체인 검색과 결합됩니다.
59.3.2.3. 소비자에게 인터셉터 연결
프로그래밍 방식으로 사용자에게 인터셉터 연결 JAX-WS 소비자의 인바운드 인터셉터 체인에 인터셉터를 연결하는 코드를 보여줍니다.
프로그래밍 방식으로 사용자에게 인터셉터 연결
package com.fusesource.demo; import java.io.File; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Service; import org.apache.cxf.endpoint.Client; public class Client { public static void main(String args[]) { QName serviceName = new QName("http://demo.eric.org", "stockQuoteReporter"); Service s = Service.create(serviceName); QName portName = new QName("http://demo.eric.org", "stockQuoteReporterPort"); s.addPort(portName, "http://schemas.xmlsoap.org/soap/", "http://localhost:9000/EricStockQuote"); quoteReporter proxy = s.getPort(portName, quoteReporter.class); Client cxfClient = (Client) proxy; ValidateInterceptor validInterceptor = new ValidateInterceptor(); cxfClient.getInInterceptor().add(validInterceptor); ... } }
프로그래밍 방식으로 사용자에게 인터셉터 연결 의 코드는 다음을 수행합니다.
소비자에 대한 JAX-WS Service
오브젝트를 만듭니다.
소비자의 대상 주소를 제공하는 Service
오브젝트에 포트를 추가합니다.
서비스 공급자에서 메서드를 호출하는 데 사용되는 프록시를 생성합니다.
프록시를 org.apache.cxf.endpoint.Client
유형으로 캐스팅합니다.
인터셉터의 인스턴스를 생성합니다.
인바운드 인터셉터 체인에 인터셉터를 연결합니다.
59.3.2.4. 서비스 공급자에 인터셉터 연결
프로그래밍 방식으로 서비스 공급자에 인터셉터 연결 서비스 공급자의 아웃바운드 인터셉터 체인에 인터셉터를 연결하는 코드를 보여줍니다.
프로그래밍 방식으로 서비스 공급자에 인터셉터 연결
package com.fusesource.demo; import java.util.*; import org.apache.cxf.endpoint.Server; import org.apache.cxf.frontend.ServerFactoryBean; import org.apache.cxf.frontend.EndpointImpl; public class stockQuoteReporter implements quoteReporter { ... public stockQuoteReporter() { ServerFactoryBean sfb = new ServerFactoryBean(); Server server = sfb.create(); EndpointImpl endpt = server.getEndpoint(); AuthTokenInterceptor authInterceptor = new AuthTokenInterceptor(); endpt.getOutInterceptor().add(authInterceptor); } }
프로그래밍 방식으로 서비스 공급자에 인터셉터 연결 의 코드는 다음을 수행합니다.
기본 Apache CXF 개체에 대한 액세스를 제공할 ServerFactoryBean
개체를 만듭니다.
Apache CXF가 엔드포인트를 나타내는 데 사용하는 서버
개체를 가져옵니다.
서비스 공급자의 Apache CXF EndpointImpl
오브젝트를 가져옵니다.
인터셉터의 인스턴스를 생성합니다.
인터셉터를 끝점에 연결합니다.s 아웃바운드 인터셉터 체인.
59.3.2.5. 버스에 인터셉터 연결
버스에 인터셉터 연결 는 인터셉터를 버스의 인바운드 인터셉터 체인에 연결하는 코드를 보여줍니다.
버스에 인터셉터 연결
import org.apache.cxf.BusFactory; org.apache.cxf.Bus; ... Bus bus = BusFactory.getDefaultBus(); WatchInterceptor watchInterceptor = new WatchInterceptor(); bus..getInInterceptor().add(watchInterceptor); ...
버스에 인터셉터 연결 의 코드는 다음을 수행합니다.
런타임 인스턴스의 기본 버스를 가져옵니다.
인터셉터의 인스턴스를 생성합니다.
인바운드 인터셉터 체인에 인터셉터를 연결합니다.
WatchInterceptor
는 런타임 인스턴스에서 생성된 모든 엔드포인트의 인바운드 인터셉터 체인에 연결됩니다.