25.3. 서비스에 포트 추가

25.3.1. 개요

서비스에 대한 엔드포인트 정보는 wsdl:port 요소에 정의되어 있으며 Service 오브젝트는 WSDL 계약에 정의된 각 엔드포인트에 대해 프록시 인스턴스를 생성합니다. Service 개체를 만들 때 WSDL 계약을 지정하지 않으면 서비스 오브젝트에 서비스를 구현하는 끝점에 대한 정보가 없으므로 프록시 인스턴스를 생성할 수 없습니다. 이 경우, addPort() 메서드를 사용하여 wsdl:port 요소를 나타내는 데 필요한 정보를 Service 오브젝트에 제공해야 합니다.

25.3.2. addPort() 메서드

Service 클래스는 예 25.3. “addPort() 메서드” 에 표시된 addPort() 메서드를 정의합니다. 이는 소비자 구현에서 사용할 수 있는 WSDL 계약이 없는 경우 사용됩니다. addPort() 메서드를 사용하면 Service 오브젝트에 정보를 제공할 수 있으며, 이는 일반적으로 서비스 구현에 대한 프록시를 생성하는 데 필요한 wsdl:port 요소에 저장됩니다.

예 25.3. addPort() 메서드

addPortQNameportNameStringbindingIdStringendpointAddressWebServiceException

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

  1. @WebService 주석의 portName 속성에 지정합니다.
  2. @WebService 주석의 name 속성 값에 Port 를 추가합니다.
  3. SEI 이름에 포트 를 추가합니다.

bindingId 매개변수 값은 끝점에서 사용하는 바인딩 유형을 고유하게 식별하는 문자열입니다. SOAP 바인딩의 경우 표준 SOAP 네임스페이스: http://schemas.xmlsoap.org/soap/ 을 사용합니다. 끝점에서 SOAP 바인딩을 사용하지 않는 경우 bindingId 매개 변수의 값은 바인딩 개발자에 의해 결정됩니다. endpointAddress 매개변수 값은 끝점이 게시되는 주소입니다. SOAP/HTTP 엔드포인트의 경우 주소는 HTTP 주소입니다. HTTP 이외의 전송은 다른 주소 체계를 사용합니다.

25.3.3. 예제

예 25.4. “서비스 오브젝트에 포트 추가” 예 25.2. “서비스 오브젝트 생성” 에서 생성된 Service 오브젝트에 포트를 추가하는 코드를 보여줍니다.

예 25.4. 서비스 오브젝트에 포트 추가

package com.fusesource.demo;

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

public class Client
{
public static void main(String args[])
  {
    ...
    QName portName = new QName("http://demo.redhat.com", "stockQuoteReporterPort");
    s.addPort(portName,
              "http://schemas.xmlsoap.org/soap/",
              "http://localhost:9000/StockQuote");
    ...
  }
}

예 25.4. “서비스 오브젝트에 포트 추가” 의 코드는 다음을 수행합니다.

portName 매개 변수의 QName을 생성합니다.

addPort() 메서드를 호출합니다.

끝점에서 SOAP 바인딩을 사용하도록 지정합니다.

끝점이 게시되는 주소를 지정합니다.