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 에서 서비스 공급자를 게시합니다.

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

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