29.2. 주입을 통해 프록시 인스턴스화
29.2.1. 개요
Apache CXF의 Spring Framework를 사용하면 JAX-WS API를 사용하여 서비스 프록시를 생성하는 번거로움을 피할 수 있습니다. 구성 파일에 클라이언트 끝점을 정의한 다음 구현 코드에 프록시를 직접 삽입할 수 있습니다. 런타임이 구현 오브젝트를 인스턴스화할 때 구성에 따라 외부 서비스에 대한 프록시를 인스턴스화합니다. 구현은 인스턴스화된 프록시에 대한 참조로 제공됩니다.
프록시는 구성 파일의 정보를 사용하여 인스턴스화되므로 WSDL 위치는 하드 코딩할 필요가 없습니다. 배포 시 변경할 수 있습니다. 런타임이 애플리케이션의 classpath에서 WSDL을 검색하도록 지정할 수도 있습니다.
29.2.2. 절차
외부 서비스의 프록시를 서비스 공급자의 구현에 삽입하려면 다음을 수행합니다.
애플리케이션의 모든 부분에서 액세스할 수 있는 잘 알려진 위치에 필요한 WSDL 문서를 배포합니다.
참고애플리케이션을 WAR 파일로 배포하는 경우 WAR의
WEB-INF/wsdl
폴더에 모든 WSDL 문서 및 XML 스키마 문서를 배치하는 것이 좋습니다.참고애플리케이션을 JAR 파일로 배포하는 경우 JAR의
META-INF/wsdl
폴더에 모든 WSDL 문서 및 XML 스키마 문서를 배치하는 것이 좋습니다.- 삽입되는 프록시에 대해 JAX-WS 클라이언트 끝점을 구성합니다.
-
@Resource
주석을 사용하여 제공하는 서비스에 프록시를 삽입합니다. ???
29.2.3. 프록시 구성
애플리케이션의 구성 파일에서 jaxws:client
요소를 사용하여 JAX-WS 클라이언트 엔드포인트를 구성합니다. 이렇게 하면 런타임에 org.apache.cxf.jaxws.JaxWsClientProxy
개체를 지정된 속성을 사용하여 인스턴스화합니다. 이 오브젝트는 서비스 공급자에 삽입될 프록시입니다.
최소한 다음 속성에 대한 값을 제공해야 합니다.
-
id
- 삽입할 클라이언트를 식별하는 데 사용되는 ID를 지정합니다. -
serviceClass
는 프록시가 요청하는 서비스의 SEI를 지정합니다.
예 29.1. “프록시가 서비스 구현에 삽입될 수 있는 구성” JAX-WS 클라이언트 끝점에 대한 구성을 보여줍니다.
예 29.1. 프록시가 서비스 구현에 삽입될 수 있는 구성
<beans ... xmlns:jaxws="http://cxf.apache.org/jaxws" ... schemaLocation="... http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd ..."> <jaxws:client id="bookClient" serviceClass="org.apache.cxf.demo.BookService" wsdlLocation="classpath:books.wsdl"/> ... </beans>
예 29.1. “프록시가 서비스 구현에 삽입될 수 있는 구성” 에서 wsdlLocation
특성은 런타임이 classpath에서 WSDL을 로드하도록 지시합니다. books.wsdl
이 classpath에 있는 경우 런타임에서 해당 경로를 찾을 수 있습니다.
JAX-WS 클라이언트 구성에 대한 자세한 내용은 17.2절. “소비자 엔드 포인트 구성” 을 참조하십시오.
29.2.4. 공급자 구현 코딩
예 29.2. “서비스 구현에 프록시 삽입” 에 표시된 대로 @Resource
를 사용하여 서비스 구현에 구성된 프록시를 서비스 구현에 리소스로 삽입합니다.
예 29.2. 서비스 구현에 프록시 삽입
package demo.hw.server;
import org.apache.hello_world_soap_http.Greeter;
@javax.jws.WebService(portName = "SoapPort", serviceName = "SOAPService",
targetNamespace = "http://apache.org/hello_world_soap_http",
endpointInterface = "org.apache.hello_world_soap_http.Greeter")
public class StoreImpl implements Store {
@Resource(name="bookClient") private BookService proxy;
}
주석의 name
속성은 JAX-WS 클라이언트의 id
속성 값에 해당합니다. 구성된 프록시는 주석 직후 선언된 BookService
오브젝트에 삽입됩니다. 이 오브젝트를 사용하여 프록시의 외부 서비스에서 호출을 수행할 수 있습니다.