웹 서비스 주소 지정을 사용하는 JAX-WS 웹 서비스 애플리케이션 작성

웹 서비스 주소 지정(WS-Addressing)은 웹 서비스의 주소를 지정하고 메시지에 주소 지정 정보를 제공하는 표준 방법을 정의하여 웹 서비스 간의 상호 운영성을 돕습니다. 이 태스크에서는 WS-Addressing 엔드포인트 참조를 사용하여 액세스하는 JAX-WS 웹 서비스를 작성하는 데 필요한 단계에 대해 설명합니다. 또한 이 태스크에서는 웹 서비스의 일환으로 Stateful 자원을 사용하는 데 필요한 추가 단계에 대해 설명합니다.

시작하기 전에

이 태스크에 설명된 단계는 WebSphere® Application Server에서 실행되는 서버 및 클라이언트에 적용됩니다.

이 태스크 정보

WS-Addressing 스펙을 사용하는 JAX-WS 웹 서비스를 작성 중인 경우에는 이 태스크를 완료하십시오. 이 태스크에서는 필요한 엔드포인트 참조를 작성하기 위해 JAX-WS WS-Addressing API를 사용합니다. 또는 IBM 독점 WS-Addressing API를 사용하여 엔드포인트 참조를 작성하고 나머지 애플리케이션에서 사용하도록 JAX-WS 오브젝트로 변환할 수 있습니다.

프로시저

  1. 대상 서비스에 엔드포인트 참조를 리턴하는 웹 서비스 인터페이스를 제공하십시오.

    인터페이스는 엔드포인트 참조를 리턴해야 합니다. 이는 팩토리 조작 또는 별도의 팩토리 서비스를 사용하여 수행할 수 있습니다. 대상 서비스는 장바구니와 같은 자원 인스턴스를 향할 수 있습니다.

  2. 이전 단계에서 작성된 웹 서비스를 구현하십시오. 구현의 WS-Addressing 부분에 대해 다음 단계를 완료하십시오.
    1. 옵션: WS-Addressing 동작을 지정할 어노테이션을 포함하십시오. 세부사항은 웹 서비스 주소 지정 어노테이션의 내용을 참조하십시오.
    2. 옵션: 인터페이스가 자원 인스턴스를 향하는 웹 서비스와 관련된 경우, 자원 인스턴스를 작성하거나 찾아보십시오.
    3. 옵션: 자원 인스턴스를 사용하는 경우에는 자원의 ID를 얻으십시오. 자원 ID는 애플리케이션에 종속적이며 자원 인스턴스의 작성 도중에 생성될 수도 있습니다.
      주의: 이 ID는 SOAP 메시지에서 전파될 수 있으므로 자원 ID에는 중요한 정보를 담지 마십시오.
    4. JAX-WS 웹 서비스 주소 지정 API를 사용하여 엔드포인트 참조 작성의 지시사항에 따라 웹 서비스를 참조하는 엔드포인트 참조를 작성하십시오. 자원 인스턴스를 사용하는 경우에 자원 ID를 매개변수로 포함하십시오.
    5. 엔드포인트 참조를 리턴하십시오.
  3. 웹 서비스가 자원 인스턴스를 사용하는 경우에는 구현을 확장하여 수신 메시지를 적합한 자원 인스턴스와 일치시키십시오. 자원 ID를 앞서 작성한 엔드포인트 참조와 연관시켰으므로 해당 엔드포인트 참조를 대상으로 하는 모든 수신 메시지에는 메시지의 SOAP 헤더에 참조 매개변수로 자원 ID 정보가 들어 있습니다. 자원 ID가 SOAP 헤더에서 전달되므로 이를 웹 서비스 인터페이스에서 노출할 필요는 없습니다. WebSphere Application Server에서 메시지를 받으면 이 정보를 스레드에 있는 메시지 컨텍스트에 입력합니다. 구현을 확장하여 다음 조치를 수행하십시오.
    1. 메시지 컨텍스트에서 자원 인스턴스 ID를 얻으십시오.
      • 2005/08 WS-Addressing 네임스페이스를 사용하는 경우 MessageContext 클래스의 REFERENCE_PARAMETERS 특성을 사용하십시오.
      • 2004/08 WS-Addressing 네임스페이스를 사용하는 경우 IBM WS-Addressing API, 특히 EndpointReferenceManager.getReferenceParameterFrom MessageContext(QName resource_id) 메소드를 사용해야 합니다.
      2005/08 네임스페이스에 다음 메소드를 사용하십시오.
      ...
      List resourceIDList = (List)getContext().getMessageContext().get(MessageContext.REFERENCE_PARAMETERS);
      ...
      2004/08 네임스페이스에는 다음 메소드를 사용하십시오.
      ...
      
      String resource_identifier = 
              EndpointReferenceManager.getReferenceParameterFromMessageContext(PRINTER_ID_PARAM_QNAME);
      ...
    2. 메시지를 적합한 자원 인스턴스로 전달하십시오.
  4. 옵션: 서비스와 통신하도록 프록시 클라이언트를 구성하십시오.
    1. wsimport 또는 xjc 도구를 사용하여 클라이언트에 필요한 아티팩트를 생성하십시오.
      참고: 2004/08 WS-Addressing 스펙을 사용하려는 경우 도구의 -b 매개변수로 제공된 바인딩 파일, app_server_root/util/SubmissionEndpointReference.xjb를 지정하십시오. 이 매개변수는 표준 JAX-WS API의 IBM 구현에 포함된 SubmissionEndpointReference 클래스를 사용하여 엔드포인트 참조 오브젝트를 생성하도록 도구에 지시합니다. 이 바인딩 파일을 지정하지 않으면 결과로 생성되는 엔드포인트 참조 오브젝트는 표준 JAX-WS API에서 작동하지 않습니다.
    2. 클라이언트 코드에서 서비스 클래스의 인스턴스를 작성하십시오.
    3. 서비스 클래스에서 프록시 오브젝트를 얻으십시오. 프록시 오브젝트를 얻기 위해 JAX-WS API를 사용하는 여러 방법이 있습니다. 예를 들어, getPort 메소드는 Service 클래스에 여러 개가 있고 EndpointReference 클래스에 하나가 있습니다. 자세한 정보는 API 문서를 참조하십시오.
    4. 옵션: Addressing 또는 SubmissionAddressing 기능을 사용하여 WS-Addressing을 지원하십시오. 예를 들어, 웹 서비스 기능을 매개변수로 허용하는 getPort 메소드를 사용하여 프록시를 작성하십시오. 원하는 경우 다른 메소드(정책 세트)를 사용하여 WS-Addressing을 지원할 수도 있습니다. 자세한 정보는 JAX-WS 애플리케이션에 대한 웹 서비스 주소 지정 지원 사용의 내용을 참조하십시오.
    5. 프록시 오브젝트를 사용하여 엔드포인트 참조를 리턴하는 서비스 메소드를 호출하십시오.

    다음 샘플 코드는 웹 서비스를 호출하여 두 개의 숫자를 함께 추가하는 클라이언트를 보여줍니다. 웹 서비스가 클라이언트에 티켓(자원 ID)을 발행하면, 클라이언트는 웹 서비스를 호출할 때 이 티켓을 사용해야 합니다.

    클라이언트는 두 개의 프록시를 작성합니다. 첫 번째 프록시는 서비스에서 엔드포인트 참조로 티켓을 가져옵니다. 두 번째 프록시는 AddressingFeature 클래스를 사용하여 2005/08 스펙에 WS-Addressing을 사용 가능하도록 지정하고, 서비스를 호출하여 두 개의 숫자를 함께 추가합니다.
    ...
    CalculatorService service = new CalculatorService();
    // Create the first proxy
    Calculator port1 = service.getCalculatorServicePort();
    // Obtain the ticket as an endpoint reference from the service
    W3CEndpointReference epr = port1.getTicket();
    
    // Create the second proxy, using an addressing feature to enable WS-Addressing
    Calculator port2 = epr.getPort(Calculator.class, new AddressingFeature());
    // Invoke the service to add the numbers
    int answer = port2.add(value0, value1);
    System.out.println("The answer is: " + answer);
    ...
    참고: 엔드포인트 참조의 메타데이터가 아웃바운드 메시지와 이미 연관된 정보와 충돌하는 경우(예를 들어, 프록시 오브젝트가 다른 인터페이스를 표시하도록 구성된 경우), 엔드포인트를 호출하려고 시도하면 javax.xml.ws.WebServiceException 예외가 발생합니다.
    message-addressing 특성을 설정하려면(예: 엔드포인트에 대한 회신), IBM의 웹 서비스 주소 지정 SPI를 사용하여 메시지 주소 지정 특성 지정 및 확보에서 설명한 대로 IBM 독점 WS-Addressing SPI 및 BindingProvider 클래스를 사용해야 합니다.
  5. 옵션: 서비스와 통신하도록 디스패치 클라이언트를 구성하십시오. 여러 가지 방법으로 클라이언트를 구성할 수 있습니다. 다음 단계는 한 가지 예제를 보여줍니다.
    1. 서비스의 인스턴스를 작성하십시오.
    2. 포트를 서비스 오브젝트에 추가하십시오.
    3. 엔드포인트 참조를 포함하여 디스패치 클래스의 인스턴스를 작성하십시오.
    4. 디스패치 오브젝트를 작성하십시오. 다음 매개변수와 함께 Service.createDispatch 메소드를 사용하십시오. 몇 가지 Service.createDispatch 메소드 변형이 있습니다. 자세한 정보는 API 문서를 참조하십시오.
    5. 클라이언트 요청 메시지를 작성하십시오.
    6. 디스패치 클라이언트가 있는 서비스 엔드포인트를 호출하십시오.
    다음 코드는 2004/08 WS-Addressing을 사용하는 디스패치 클라이언트의 예제 단편을 보여줍니다.
    ...
    CalculatorService service = new CalculatorService();
    Dispatch(<SOAPMessage> dispatch = service.createDispatch( 
        endpointReference,
        SOAPMessage.class,  
        Service.Mode.MESSAGE,  
        new SubmissionAddressingFeature(true));
    ...

결과

웹 서비스 및 클라이언트는 WS-Addressing 지원을 통해 엔드포인트 참조를 사용하도록 구성되어 있습니다. 코드를 포함하는 자세한 예제에 대해서는 예제: 일반 웹 서비스 자원 인스턴스에 액세스하도록 JAX-WS 웹 서비스 주소 지정 API를 사용하는 웹 서비스 작성의 내용을 참조하십시오.

다음에 수행할 작업

  • WS-Addressing을 사용하는 보안에 대한 자세한 정보는 웹 서비스 주소 지정 보안의 내용을 참조하십시오.
  • 애플리케이션를 배치하십시오. 코드에서 WS-Addressing 어노테이션 또는 기능을 사용한 경우 WS-Addressing 지원을 사용하기 위해 추가 단계를 수행할 필요가 없습니다. 자세한 정보 및 추가 단계를 필요로 하는 다른 시나리오(예: 정책 세트를 사용하여 WS-Addressing 지원 사용)에 대해서는 JAX-WS 애플리케이션에 대한 웹 서비스 주소 지정 지원 사용의 내용을 참조하십시오.

주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_wsa_rap_jaxws
파일 이름:twbs_wsa_rap_jaxws.html