29.4. 계약 확인자 사용


29.4.1. 개요

런타임 시 WSDL 문서 위치를 해결하기 위한 가장 중요한 메커니즘은 사용자 정의 계약 확인자를 구현하는 것입니다. 이를 위해서는 Apache CXF 관련 ServiceContractResolver 인터페이스를 구현해야 합니다. 또한 버스에 사용자 정의 리졸버를 등록해야 합니다.

올바르게 등록되면 사용자 정의 계약 확인자가 필요한 WSDL 및 스키마 문서의 위치를 확인하는 데 사용됩니다.

29.4.2. 계약 확인 프로그램 구현

계약 확인자는 org.apache.cxf.endpoint.ServiceContractResolver 인터페이스의 구현입니다. 예 29.3. “ServiceContractResolver Interface” 에 표시된 것처럼 이 인터페이스에는 구현해야 하는 단일 메서드인 getContractLocation() 이 있습니다. getContractLocation() 은 서비스의 QName을 가져와서 서비스의 WSDL 계약에 대한 URI를 반환합니다.

예 29.3. ServiceContractResolver Interface

public interface ServiceContractResolver
{
   URI getContractLocation(QName qname);
}

WSDL 계약의 위치를 해결하는 데 사용되는 논리는 애플리케이션별로 다릅니다. UDDI 레지스트리, 데이터베이스, 파일 시스템의 사용자 지정 위치 또는 선택한 기타 메커니즘에서 계약 위치를 확인하는 논리를 추가할 수 있습니다.

29.4.3. 프로그래밍 방식으로 계약 확인 프로그램 등록

Apache CXF 런타임에서 계약 확인자를 사용하기 전에 계약 확인자 레지스트리에 등록해야 합니다. 계약 확인자 레지스트리는 org.apache.cxf.endpoint.ServiceContractResolverRegistry 인터페이스를 구현합니다. 그러나 자체 레지스트리를 구현할 필요는 없습니다. Apache CXF는 org.apache.cxf.endpoint.ServiceContractResolverRegistryImpl 클래스에서 기본 구현을 제공합니다.

기본 레지스트리에 계약 확인자를 등록하려면 다음을 수행합니다.

  1. 기본 버스 오브젝트에 대한 참조를 가져옵니다.
  2. 버스의 getExtension() 메서드를 사용하여 버스에서 서비스 계약 레지스트리를 가져옵니다.
  3. 계약 확인자 인스턴스를 생성합니다.
  4. 레지스트리의 register() 메서드를 사용하여 계약 확인자를 레지스트리에 등록합니다.

예 29.4. “계약 해결 프로그램 등록” 기본 레지스트리에 계약 확인자를 등록하기 위한 코드가 표시됩니다.

예 29.4. 계약 해결 프로그램 등록

BusFactory bf=BusFactory.newInstance();
Bus bus=bf.createBus();

ServiceContractResolverRegistry registry = bus.getExtension(ServiceContractResolverRegistry);

JarServiceContractResolver resolver = new JarServiceContractResolver();

registry.register(resolver);

예 29.4. “계약 해결 프로그램 등록” 의 코드는 다음을 수행합니다.

버스 인스턴스를 가져옵니다.

버스의 계약 확인자 레지스트리를 가져옵니다.

계약 확인자의 인스턴스를 만듭니다.

계약 확인 프로그램을 레지스트리에 등록합니다.

29.4.4. 구성을 사용하여 계약 확인 프로그램 등록

구성을 통해 클라이언트에 추가할 수 있도록 계약 해결자를 구현할 수도 있습니다. 계약 확인자는 런타임이 구성을 읽고 해결자를 인스턴스화할 때 확인자가 직접 등록하는 방식으로 구현됩니다. 런타임은 초기화를 처리하므로 클라이언트가 계약 확인자를 사용해야 하는지 런타임에 결정할 수 있습니다.Because the runtime handles the initialization, you can decide at runtime if a client needs to use the contract resolver.

구성을 통해 클라이언트에 추가할 수 있도록 계약 해결자를 구현하려면 다음을 수행합니다.

  1. 계약 확인자 구현에 init() 메서드를 추가합니다.
  2. 예 29.4. “계약 해결 프로그램 등록” 과 같이 계약 확인자를 계약 확인자 레지스트리에 등록하는 init() 메서드에 논리를 추가합니다.
  3. @PostConstruct 주석을 사용하여 init() 메서드를 분리합니다.

예 29.5. “구성을 사용하여 등록할 수 있는 서비스 계약 해결 방법” 구성을 사용하여 클라이언트에 추가할 수 있는 계약 확인자 구현을 표시합니다.

예 29.5. 구성을 사용하여 등록할 수 있는 서비스 계약 해결 방법

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.xml.namespace.QName;

import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;

public class UddiResolver implements ServiceContractResolver
{
  private Bus bus;
  ...

  @PostConstruct
  public void init()
  {
    BusFactory bf=BusFactory.newInstance();
    Bus bus=bf.createBus();
    if (null != bus)
    {
      ServiceContractResolverRegistry resolverRegistry = bus.getExtension(ServiceContractResolverRegistry.class);
      if (resolverRegistry != null)
      {
        resolverRegistry.register(this);
      }
    }
  }

  public URI getContractLocation(QName serviceName)
  {
    ...
  }
}

계약 확인자를 클라이언트에 등록하려면 클라이언트 구성에 ans 요소를 추가해야 합니다. Cryo stat 요소의 클래스 속성은 계약 확인자를 구현하는 클래스의 이름입니다.

예 29.6. “ans Configuring a Contract Resolver” org.apache.cxf.demos.myContractResolver 클래스에서 구현한 구성 해결자를 추가하기 위한 8080을 표시합니다.

예 29.6. ans Configuring a Contract Resolver

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  ...
  <bean id="myResolver" class="org.apache.cxf.demos.myContractResolver" />
  ...
</beans>

29.4.5. 계약 해결 순서

새 프록시가 생성되면 런타임은 계약 레지스트리 확인자를 사용하여 원격 서비스의 WSDL 계약을 찾습니다. 계약 확인자 레지스트리는 확인자가 등록된 순서대로 각 계약 확인자의 getContractLocation() 메서드를 호출합니다. 등록된 계약 확인자 중 하나에서 반환된 첫 번째 URI를 반환합니다.

잘 알려진 공유 파일 시스템에서 WSDL 계약을 해결하려고 시도한 계약 확인자를 등록한 경우 사용된 유일한 계약 확인자가 됩니다. 그러나 UDDI 레지스트리를 사용하여 WSDL 위치를 해결한 계약 확인자를 나중에 등록한 경우 레지스트리는 두 해결 방법을 사용하여 서비스의 WSDL 계약을 찾을 수 있습니다. 먼저 레지스트리는 공유 파일 시스템 계약 확인자를 사용하여 계약을 찾습니다. 해당 계약 확인자가 실패하면 레지스트리에서 UDDI 계약 확인자를 사용하여 찾습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.