25.2. 서비스 오브젝트 생성


25.2.1. 개요

javax.xml.ws.Service 클래스는 서비스를 노출하는 모든 끝점의 정의가 포함된 wsdl:service 요소를 나타냅니다. 따라서 서비스에서 원격 호출을 수행하기 위한 프록시인 wsdl:port 요소에 의해 정의된 엔드포인트를 가져올 수 있는 메서드를 제공합니다.

참고

Service 클래스는 XML 문서를 사용하는 대신 클라이언트 코드가 Java 형식으로 작업할 수 있도록 하는 추상화를 제공합니다.

25.2.2. create() 메서드

Service 클래스에는 새 Service 개체를 만드는 데 사용할 수 있는 두 개의 정적 create() 메서드가 있습니다. 예 25.1. “Service create() Methods” 에 표시된 대로 두 create() 메서드는 Service 오브젝트가 나타내는 wsdl:service 요소의 QName을 사용하고, 하나는 WSDL 계약의 위치를 지정하는 URI를 사용합니다.

참고

모든 서비스는 WSDL 계약을 게시합니다. Cryostat/HTTP 서비스의 경우 URI는 일반적으로 ?wsdl.wsdl이 추가된 서비스에 대한 URI입니다.

예 25.1. Service create() Methods

공용 정적서비스생성URLwsdlLocationQNameserviceNameWebServiceExceptionpublic staticServicecreateQNameserviceNameWebServiceException

serviceName 매개변수의 값은 QName입니다. 네임스페이스 부분 값은 서비스의 대상 네임스페이스입니다. 서비스의 대상 네임스페이스는 @WebService 주석의 targetNamespace 속성에 지정됩니다. QName의 로컬 부분의 값은 wsdl:service 요소의 name 속성 값입니다. 다음 방법 중 하나로 이 값을 확인할 수 있습니다. . @WebService 주석의 serviceName 속성에 지정됩니다.

  1. Service@WebService 주석의 name 속성 값에 추가합니다.
  2. SEI 이름에 서비스를 추가합니다.
중요

OSGi 환경에 배포된 프로그래밍 방식으로 생성된 CXF 소비자는 ClassNotFoundExceptions가 발생할 가능성을 방지하기 위해 특별한 처리가 필요합니다. 프로그래밍 방식으로 생성된 CXF 소비자가 포함된 각 번들에 싱글톤 CXF 기본 버스를 생성하고 모든 번들의 CXF 소비자가 이를 사용하는지 확인해야 합니다. 이 보호 장치가 없으면 하나의 번들에 다른 번들에서 생성된 CXF 기본 버스가 할당되어 상속 번들에 실패할 수 있습니다.

예를 들어 번들 A에서 CXF 기본 버스를 명시적으로 설정하지 않았으며 번들 B에서 생성된 CXF 기본 버스가 할당되었다고 가정합니다. 번들 A의 CXF 버스를 추가 기능(예: SSL 또는 WS-Security)으로 구성하거나 번들 A에서 애플리케이션의 특정 클래스 또는 리소스를 로드해야 하는 경우 실패합니다. 이는 CXF 버스 인스턴스가 스레드 컨텍스트 클래스 로더(TCCL)를 생성한 번들의 번들 클래스 로더(이 경우 번들 B)로 설정하기 때문입니다. 또한 CXF의 WS-Security 구현과 같은 특정 프레임워크는 TCCL을 사용하여 번들 내부에서 calback 처리기 클래스 또는 기타 속성 파일과 같은 리소스를 로드합니다. 번들 A에는 번들 B의 기본 CXF 버스가 할당되어 있고 TCCL이므로 ws4j 계층에서 번들 A에서 필요한 리소스를 로드할 수 없으므로 ClassNotFoundException 오류가 발생합니다.

Singleton CXF 기본 버스를 생성하려면 “예” 와 같이 서비스 오브젝트를 생성하는 기본 방법의 시작 부분에 이 코드를 삽입합니다.

BusFactory.setThreadDefaultBus(BusFactory.newInstance().createBus());

25.2.3. 예

예 25.2. “서비스 오브젝트 생성” 예 24.7. “완전히 주석 처리됨 SEI” 에 표시된 SEI의 서비스 오브젝트를 생성하는 코드를 보여줍니다.

예 25.2. 서비스 오브젝트 생성

package com.fusesource.demo;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class Client
{
public static void main(String args[])
  {
    BusFactory.setThreadDefaultBus(BusFactory.newInstance().createBus());
    QName serviceName = new QName("http://demo.redhat.com", "stockQuoteReporter");
    Service s = Service.create(serviceName);
   ...
  }
}

예 25.2. “서비스 오브젝트 생성” 의 코드는 다음을 수행합니다.

서비스의 모든 CXF 사용자가 사용할 수 있는 싱글톤 CXF 기본 버스를 생성합니다.

targetNamespace 속성 및 @WebService 주석의 name 속성을 사용하여 서비스의 QName을 빌드합니다.

단일 매개 변수 create() 메서드를 호출하여 새 Service 오브젝트를 생성합니다.

참고

단일 매개변수 create() 를 사용하면 WSDL 계약에 액세스하는 데 대한 종속성을 가질 수 없습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.