29.2. 프록시를 인스턴스화합니다.
29.2.1. 개요
Apache CXF가 Spring Framework를 사용하면 Cryostat-WS API를 사용하여 서비스 프록시를 생성하는 번거로움을 방지할 수 있습니다. 구성 파일에서 클라이언트 끝점을 정의한 다음 구현 코드에 프록시를 직접 삽입할 수 있습니다. 런타임이 구현 오브젝트를 인스턴스화할 때 구성을 기반으로 외부 서비스에 대한 프록시도 인스턴스화합니다. 구현은 인스턴스화된 프록시를 참조하여 전달됩니다.
프록시는 구성 파일의 정보를 사용하여 인스턴스화되므로 WSDL 위치는 하드 코딩할 필요가 없습니다. 배포 시 변경할 수 있습니다. 런타임에서 애플리케이션의 classpath에서 WSDL을 검색하도록 지정할 수도 있습니다.
29.2.2. 프로세스
외부 서비스의 프록시를 서비스 공급자의 구현에 삽입하려면 다음을 수행합니다.
애플리케이션의 모든 부분에 액세스할 수 있는 잘 알려진 위치에 필요한 WSDL 문서를 배포합니다.
참고애플리케이션을 WAR 파일로 배포하는 경우 WAR의 internet
-INF/wsdl
폴더에 모든 WSDL 문서 및 XML 스키마 문서를 배치하는 것이 좋습니다.참고애플리케이션을 JAR 파일로 배포하는 경우 JAR의
META-INF/wsdl
폴더에 모든 WSDL 문서 및 XML 스키마 문서를 배치하는 것이 좋습니다.- 삽입 중인 프록시에 대해 Cryostat-WS 클라이언트 끝점을 구성합니다.
-
@Resource
주석을 사용하여 제공하는 서비스에 프록시를 삽입합니다. ???
29.2.3. 프록시 구성
애플리케이션의 구성 파일에서 jaxws:client
요소를 사용하여 Cryostat-WS 클라이언트 끝점을 구성합니다. 이는 런타임에서 지정된 속성을 사용하여 org.apache.cxf.jaxws.JaxWsClientProxy
오브젝트를 인스턴스화하도록 지시합니다. 이 오브젝트는 서비스 공급자에 삽입될 프록시입니다.
최소한 다음 속성에 대한 값을 제공해야 합니다.
-
ID
- Specifies할 클라이언트를 식별하는 데 사용되는 ID입니다. -
serviceClass
- 프록시가 요청을 수행하는 서비스의 SEI를 지정합니다.
예 29.1. “서비스 구현에 삽입할 프록시 구성” Cryostat-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을 로드하도록 런타임에 지시합니다. book.wsdl
이 classpath에 있으면 런타임에서 찾을 수 있습니다.
Cryostat-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
속성은 Cryostat-WS 클라이언트의 id
속성 값에 해당합니다. 구성된 프록시는 주석 직후 선언된 BookService
오브젝트에 삽입됩니다. 이 오브젝트를 사용하여 프록시의 외부 서비스에서 호출할 수 있습니다.