Red Hat Training

A Red Hat training course is available for Red Hat Fuse

31.3. 일반 Java 애플리케이션에 서비스 게시

31.3.1. 개요

애플리케이션을 일반 java 애플리케이션으로 배포하려면 애플리케이션의 main() 메서드에 끝점을 게시하는 논리를 구현해야 합니다. Apache CXF는 애플리케이션의 main() 메서드를 작성하는 두 가지 옵션을 제공합니다.

  • wsdl2java 툴에서 생성한 main() 메서드를 사용합니다.
  • 끝점을 게시하는 사용자 정의 main() 메서드 작성

31.3.2. 서버 Mainline 생성

코드 생성기 -server 플래그를 사용하면 도구가 간단한 서버 메인라인을 생성할 수 있습니다. 예 31.2. “생성된 서버 메인 라인” 와 같이 생성된 서버 메인 라인은 지정된 WSDL 계약의 각 포트 요소에 대해 하나의 서비스 공급자를 게시합니다.

자세한 내용은 44.2절. “cxf-codegen-plugin” 에서 참조하십시오.

예 31.2. “생성된 서버 메인 라인” 생성된 서버 메인라인을 표시합니다.

예 31.2. 생성된 서버 메인 라인

package org.apache.hello_world_soap_http;

import javax.xml.ws.Endpoint;

public class GreeterServer {

    protected GreeterServer() throws Exception {
        System.out.println("Starting Server");
        Object implementor = new GreeterImpl();
        String address = "http://localhost:9000/SoapContext/SoapPort";
        Endpoint.publish(address, implementor);
    }

    public static void main(String args[]) throws Exception {
        new GreeterServer();
        System.out.println("Server ready...");

        Thread.sleep(5 * 60 * 1000);
        System.out.println("Server exiting");
        System.exit(0);
    }
}

예 31.2. “생성된 서버 메인 라인” 의 코드는 다음을 수행합니다.

서비스 구현 오브젝트의 사본을 인스턴스화합니다.

끝점의 계약에 있는 wsdl:port 요소의 address 하위 항목 콘텐츠를 기반으로 끝점의 주소를 생성합니다.

엔드포인트를 게시합니다.

31.3.3. 서버 Mainline 작성

Java 첫 번째 개발 모델을 사용하거나 생성된 서버 메인 라인을 사용하지 않으려면 직접 작성할 수 있습니다. 서버 메인라인을 작성하려면 다음을 수행해야 합니다.

  1. “서비스 공급자 인스턴스화” 서비스 공급자의 javax.xml.ws.Endpoint 오브젝트입니다.
  2. 서비스 공급자를 게시할 때 사용할 선택적 서버 컨텍스트를 생성합니다.
  3. “서비스 공급자 게시” publish() 방법 중 하나를 사용하는 서비스 공급자입니다.
  4. 애플리케이션을 종료할 준비가 되면 서비스 공급자를 중지합니다.

예 31.3. “사용자 정의 서버 Mainline” 서비스 공급자 게시를 위한 코드를 보여줍니다.

예 31.3. 사용자 정의 서버 Mainline

package org.apache.hello_world_soap_http;

import javax.xml.ws.Endpoint;

public class GreeterServer
{
  protected GreeterServer() throws Exception
  {
  }

  public static void main(String args[]) throws Exception
  {
    GreeterImpl impl = new GreeterImpl();
    Endpoint endpt.create(impl);
    endpt.publish("http://localhost:9000/SoapContext/SoapPort");

    boolean done = false;
   while(!done)
    {
      ...
    }

   endpt.stop();
    System.exit(0);
  }
}

예 31.3. “사용자 정의 서버 Mainline” 의 코드는 다음을 수행합니다.

서비스 구현 개체의 사본을 인스턴스화합니다.

서비스 구현을 위해 게시되지 않은 끝점을 생성합니다.

http://localhost:9000/SoapContext/SoapPort 에서 서비스 공급자를 게시합니다.

서버가 종료될 때까지 반복합니다.

게시된 끝점을 중지합니다.