2008년 3월 5일 수요일

Maven을 지원하는 JAX-WS 사용

JAX-WS(Java API for XML-Based Web Services)는 SOAP 기반 및 RESTful 자바 웹 서비스 개발의 바탕이 되는 기술로서, GlassFish의 웹 서비스 기술 스택인 Metro 프로젝트의 핵심 요소입니다. JAX-WS는 고성능 런타임을 제공할 뿐 아니라 웹 서비스 및 웹 서비스 클라이언트를 만들 수 있는 도구인 wsimportwsgen을 제공합니다. wsimport 도구는 WSDL(Web Services Definition Language) 파일을 입력으로 받아 SEI(Service Endpoint Interface)와 같은 이동 가능한 JAX-WS 아티팩트를 생성합니다. wsgen 도구는 웹 서비스 엔드포인트 클래스를 읽고 웹 서비스 배포 및 호출에 필요한 모든 아티팩트를 생성합니다.

wsimportwsgen 도구는 GlassFish CLI(Command Line Interface)를 통해 액세스할 수 있습니다. 또는 Ant 태스크나 Maven 플러그인을 통해서도 액세스할 수 있습니다. 이 팁에서는 JAX-WS Maven 플러그인을 사용하여 웹 서비스를 개발하는 방법에 대해 설명합니다.


Maven

Maven은 구성 가능성이 매우 우수한 프레임워크로서, 애플리케이션 빌드 및 배포에서부터 문서 생성 및 프로젝트 관리에 이르는 프로젝트 수명 주기의 다양한 측면을 관리하는 데 사용할 수 있습니다. Maven은 Ant처럼 프로젝트 레이아웃과 의존성 관리 체계가 표준화되어 있어 매우 널리 사용되고 있는 개발 도구입니다. 프로젝트 레이아웃에 대해 표준 규약을 따르고 컴파일 및 패키징과 같은 수명 주기 단계에서 표준 기본값을 사용하면 이해하기 쉽고 관리하기 쉬운 프로젝트를 만들 수 있습니다.

Maven은 POM(Project Object Model)을 사용하여 프로젝트와 관련된 정보를 기술합니다. 프로젝트 빌드 및 배포 방법을 정의해야 하는 Ant와 달리 모든 Maven 프로젝트는 빌드 및 패키징과 같은, 명확하게 정의된 태스크를 수행하는 데 있어 일련의 플러그인을 항상 공유합니다. 또한 이러한 플러그인은 기본 동작 및 빌드 순서를 필요한 대로 변경하여 구성할 수도 있습니다.

Maven에 대한 자세한 내용은 Welcome to MavenBuilding Web Applications with Maven 2를 참조하십시오.


JAX-WS Maven 플러그인

앞에서 언급했듯이 JAX-WS는 웹 서비스 배포를 위해 wsimportwsgen이라는 두 개의 도구를 제공합니다. JAX-WS Maven 플러그인은 이러한 도구를 위한 Maven 어댑터를 제공합니다. 이 플러그인은 도구 기능에 jaxws:wsimportjaxws:wsgen이라는 작업을 추가합니다. Maven에서 작업은 쉽게 말해 Ant 태스크와 같은 것입니다. 두 가지 작업 각각에 대해 플러그인은 해당 CLI 또는 Ant 태스크에 전달될 수 있는 모든 구성 옵션을 허용합니다.

jaxws:wsimport 작업을 위해 플러그인은 WSDL 파일을 읽고 웹 서비스 생성, 배포 및 호출에 필요한 자바 클래스를 생성합니다. jaxws:wsimport 작업은 수명 주기 단계 생성 소스 내에서 자동으로 실행됩니다. 이 플러그인은 기본적으로 ${basedir}/src/wsdl 디렉토리에서 WSDL 파일을 찾습니다. 그러나 wsdlLocation 매개변수를 구성하여 WSDL 파일의 위치를 지정할 수도 있습니다. 모든 jaxws:wsimport 구성 매개변수에 대한 설명은 jaxws:wsimport에 대한 JAX-WS commons 페이지에서 볼 수 있습니다.

jaxws:wsgen 작업의 경우 플러그인은 SEI 클래스를 읽고 JAX-WS 웹 서비스에 필요한 모든 이동 가능 아티팩트를 생성합니다. jaxws:wsgen 작업은 수명 주기 프로세스 클래스 내에서 자동으로 실행됩니다. 이 플러그인을 사용하려면 jaxws:wsgen 작업에 대해 sei 매개변수를 설정하여 서비스 엔드포인트 구현 클래스 이름을 지정해야 합니다. 또는 genWsdl 매개변수를 지정할 경우 서비스 엔드포인트 구현 클래스에서 WSDL 파일의 형태로 서비스 설명을 생성할 수도 있습니다. 그러나 genWsdl 매개변수는 선택적인 매개변수이며 JAX-WS 런타임은 배포 후에 WSDL을 동적으로 생성할 수 있습니다. 모든 jaxws:wsgen 매개변수에 대한 설명은 jaxws:wsgen에 대한 JAX-WS commons 페이지에서 볼 수 있습니다.

jaxws:wsimportjaxws:gen 작업은 해당 수명 주기 단계가 실행될 때 자동으로 실행됩니다. 또는 jaxws-maven-plugin:wsimport와 같이 작업을 지정하여 명시적으로 플러그인을 실행할 수도 있습니다. Maven 빌드 수명 주기 단계 및 실행에 대한 자세한 내용은 Introduction to the Build Lifecycle을 참조하십시오.


Ant
대신 JAX-WS Maven 플러그인을 사용하는 이유

Ant 태스크 대신 JAX-WS Maven 플러그인을 사용하면 Ant 태스크에서 요구되는 JAX-WS 의존 관계 구성, 클래스 경로 설정, 컴파일 및 패키징을 위한 도구 태스크 호출 등을 수행할 필요가 없다는 장점이 있습니다. Maven은 모든 의존 관계를 자동으로 다운로드하여 해당 애플리케이션에서 사용할 수 있도록 하며 빌드 수명 주기 단계에 이를 추가합니다. 그러나 플러그인 동작을 원하는 방식으로 지정할 수 있도록 일부 구성을 미설정 상태로 두어야 할 수 있습니다.

JAX-WS Maven 플러그인 및 기타 JAX-WS 도구에 대한 자세한 내용은 Metro Tools 페이지를 참조하십시오.


JAX-WS Maven 샘플

지금까지 JAX-WS Maven 플러그인에 대한 기본적인 내용을 일부 설명했습니다. 이제 이 플러그인을 사용하여 웹 서비스와 웹 서비스 클라이언트를 생성하는 샘플 애플리케이션을 살펴보겠습니다. NetBeans IDE는 플러그인을 통해 Maven 2(Maven 최신 버전) 프로젝트 관리를 지원합니다. IDE에서 플러그인을 사용하면 Maven 기반의 프로젝트를 만들고, IDE 액션을 Maven 작업에 연결하여 Maven 명령을 실행할 수 있으며, 리포지토리 찾기, 의존 관계 추가, 웹 애플리케이션의 즉석 배치 등을 쉽고도 간편하게 수행할 수 있습니다.

이러한 작업의 일부는 Maven을 실행한 후 POM 파일에서 구성을 편집하여 수동으로 수행할 수도 있습니다. 그러나 NetBeans IDE는 POM을 자동으로 생성하고 구성할 수 있는 보다 간편한 방법을 제공합니다. 따라서 이 팁의 샘플에서는 NetBeans IDE 6.0을 사용하겠습니다.

본 팁에는 샘플 애플리케이션 코드가 수록된 패키지가 함께 제공됩니다. 아래의 설명을 사용하여 샘플 애플리케이션을 빌드할 때 사용자가 직접 작성하는 파일과 패키지에서 제공하는 파일을 비교할 수 있습니다.


초기 설정

샘플을 설치하고 실행하기 전에 다음과 같이 몇 가지 초기 설정을 수행해야 합니다.

  1. 다음 도구를 설치하지 않았을 경우 이를 다운로드하여 설치합니다.  


    또한 JDK 6 업데이트 4 릴리스 이전 버전의 JDK 6에서 샘플을 실행하려면 jaxb-api.jarjaxws-api.jar 파일을 <java-home>/lib/endorsed로 복사하여 EOM(Endorsed Override Mechanism)을 사용해야 합니다. 이 경로에서 <java-home>은 런타임 소프트웨어가 설치된 디렉토리로서 자바 SE 런타임 환경의 최상위 디렉토리이거나 JDK의 jre 디렉토리입니다. JDK 6 업데이트 4 이상에서 이 샘플을 실행할 경우 Override Mechanism을 사용할 필요가 없습니다.  

  2. GlassFish v2를 별도로 다운로드했을 경우 다음과 같이 NetBeans에 등록합니다.  

    • Services 창에서 Servers 노드를 마우스 오른쪽 버튼으로 클릭합니다.
    • Add Server를 선택합니다.
    • Server를 Sun Java System Application Server로 유지합니다.
    • Next 버튼을 클릭합니다.
    • Browse 버튼을 클릭한 후 GlassFish V2가 설치된 위치로 이동합니다.
    • Choose 버튼을 클릭합니다.
    • Next 버튼을 클릭합니다.
    • GlassFish v2에 대해 다른 비밀번호를 선택하지 않았다면 Admin Password를 기본값인 adminadmin으로 설정합니다.
    • Finish 버튼을 클릭합니다.

  3. 다음과 같이 Mevenide2-Netbeans 플러그인을 설치합니다. 이 플러그인은 Maven 2 프로젝트에 대해 NetBeans를 지원합니다.  

    • Tools 메뉴에서 Plugins를 선택합니다.
    • Plugins 창에서 Available 플러그인을 선택합니다.
    • Maven 플러그인을 선택합니다.
    • Install 버튼을 클릭합니다.


프로젝트 및 하위 프로젝트 생성

이 샘플에서는 jaxws-maven-sample이라는 주 프로젝트(상위 프로젝트)를 작성합니다. 이 상위 프로젝트에는 웹 서비스용의 HelloService 하위 프로젝트와 웹 서비스 클라이언트용의 HelloClient 하위 프로젝트가 있습니다. 다음은 프로젝트의 구조를 보여 줍니다.

   jaxws-maven-sample (POM Project)
     helloservice (WAR project)
     helloclient (JAR Project)

리던던시를 피하기 위해 상위 프로젝트 POM에는 HelloServiceHelloClient에서 공통되는 구성 매개변수가 들어 있습니다. 프로젝트와 하위 프로젝트를 만들려면 다음과 같이 합니다.

  1. 상위 POM 프로젝트인 jaxws-maven-sample을 작성합니다.  

    • File 메뉴에서 New Project를 선택합니다.
    • Maven 범주를 선택한 다음 Maven 프로젝트를 선택합니다.
    • Next 버튼을 클릭합니다.
    • Maven Quickstart Project 세대 유형(기본값)을 선택합니다.
    • 이어서 표시되는 화면에서 Maven 프로젝트 코오디네이트라고 하는 다음과 같은 프로젝트 설정을 지정합니다.  

          - ProjectName: jaxws-maven-sample
          - ProjectLocation: 프로젝트를 포함할 디렉토리를 지정합니다(예: Users/ramapulavarthi).
          - Version: 1.0-SNAPSHOT
          - GroupId: com.example.maven.jaxws
          - Package: com.example.maven.jaxws  

    • Finish 버튼을 클릭하여 프로젝트를 작성합니다.

    NetBeans Projects 창에 해당 프로젝트가 표시되어야 합니다.  

  2. 프로젝트 등록 정보를 jar에서 pom으로 변경합니다.  

    • Projects 창에서 jaxws-maven-sample을 마우스 오른쪽 버튼으로 클릭합니다.
    • 메뉴에서 Properties 옵션을 선택합니다.
    • General 범주에서 Packaging 값을 jar에서 pom으로 변경합니다.
    • OK 버튼을 클릭합니다. Projects 창에 jaxws-maven-sample (pom)이라는 항목이 표시되는 것을 확인합니다.

  3. 기본적으로 생성된 의존 관계와 파일 중에서 필요 없는 것을 삭제합니다. 이 프로젝트는 POM 프로젝트이기 때문에 소스/테스트 대신 하위 모듈을 사용합니다. 따라서 프로젝트에서 소스를 제거해야 합니다. 또한 이 프로젝트에는 유닛 테스트가 없으므로 JUnit 의존 관계를 삭제해야 합니다.  

    • Projects 탭 옆에 있는 Files 탭을 클릭합니다.
    • Files 창에서 jaxws-maven-sample 아래에 있는 src 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 Delete를 선택합니다.
    • Projects 창에서 jaxws-maven-sampleTestLibraries 노드를 확장하고 junit-3.8.1.jar를 마우스 오른쪽 버튼으로 클릭한 후 Remove Dependency를 선택합니다.

  4. 소스를 자바 5로 변경합니다. 웹 서비스를 만들기 위해서는 자바 5가 필요합니다. 그러나 기본값은 자바 1.4입니다.  

    • Projects 창에서 jaxws-maven-sample을 마우스 오른쪽 버튼으로 클릭합니다.
    • 메뉴에서 Properties 옵션을 선택합니다.
    • Sources 범주에서 Source/Binary Format 값을 1.4에서 1.5로 변경합니다.
    • OK 버튼을 클릭합니다.
     

    jaxws-maven-sample 아래의 Project Files에서 pom.xml 파일을 보면 구성 소스 및 대상 값이 1.5로 변경되어 있을 것입니다.
     
  5. 하위 프로젝트(WAR 프로젝트) helloservice를 작성합니다.  

    1단계, "상위 프로젝트(POM 프로젝트) jaxws-maven-sample 만들기"의 절차를 반복하되 Maven Quickstart Project 세대 유형 대신 Maven WebApp 세대 유형을 선택합니다. 또한 다음과 같이 설정을 지정합니다.  

           - ProjectName: helloservice
           - ProjectLocation: jaxws-maven-sample 프로젝트를 포함할 디렉토리를 지정합니다(예: /Users/ramapulavarthi/jaxws-maven-sample).
           - Version: 1.0-SNAPSHOT
           - GroupId: com.example.maven.jaxws
           - Package: com.example.maven.jaxws.helloservice  

    • Finish 버튼을 클릭하여 프로젝트를 작성합니다.
      NetBeans Projects 창에 helloservice Maven Webapp(war)가 표시되어야 합니다. helloservice용의 pom.xml 파일에는 상위 프로젝트 jaxws-maven-sample에 대한 참조가 들어 있으며, jaxws-maven-sample용의 pom.xml 파일은 이제 helloservice용 모듈을 지정합니다.

  6. helloservice용의 의존 관계와 파일 중에서 필요 없는 것을 삭제합니다.  

    • Projects 탭 옆에 있는 Files 탭을 클릭합니다.
    • Files 창에서 helloservice Maven webapp 아래의 src 디렉토리를 확장하고 test 디렉토리를 마우스 오른쪽 버튼으로 클릭한 후 Delete를 선택합니다.
    • Projects 창에서 helloservice Maven webapp의 TestLibraries 노드를 확장하고 junit-3.8.1.jar를 마우스 오른쪽 버튼으로 클릭한 후 Remove Dependency를 선택합니다.

  7. 하위 프로젝트(WAR 프로젝트) helloservice를 작성합니다.  

    1단계, "상위 프로젝트(POM 프로젝트) jaxws-maven-sample 만들기"의 절차를 반복하되 설정을 다음과 같이 지정합니다.  

           - ProjectName: helloclient
           - ProjectLocation: jaxws-maven-sample 프로젝트를 포함할 디렉토리를 지정합니다(예: /Users/ramapulavarthi/jaxws-maven-sample).
           - Version: 1.0-SNAPSHOT
           - GroupId: com.example.maven.jaxws
           - Package: com.example.maven.jaxws.helloclient  

    • Finish 버튼을 클릭하여 프로젝트를 작성합니다.
      NetBeans Projects 창에 helloclient(jar)가 표시되어야 합니다. helloclient용의 pom.xml 파일에는 상위 프로젝트 jaxws-maven-sample에 대한 참조가 들어 있으며, jaxws-maven-sample용의 pom.xml 파일은 이제 helloclient용 모듈을 지정합니다.

  8. helloclient용의 의존 관계와 파일 중에서 필요 없는 것을 삭제합니다.  

    • Projects 탭 옆에 있는 Files 탭을 클릭합니다.
    • Files 창에서 helloclient 아래의 src 디렉토리를 확장하고 test 디렉토리를 마우스 오른쪽 버튼으로 클릭한 후 Delete를 선택합니다.
    • 하위 프로젝트(WAR 프로젝트) helloservice를 작성합니다.  

      1단계, "상위 프로젝트(POM 프로젝트) jaxws-maven-sample 만들기"의 절차를 반복하되 설정을 다음과 같이 지정합니다.  

             - ProjectName: helloclient
             - ProjectLocation: jaxws-maven-sample 프로젝트를 포함할 디렉토리를 지정합니다(예: /Users/ramapulavarthi/jaxws-maven-sample).
             - Version: 1.0-SNAPSHOT
             - GroupId: com.example.maven.jaxws
             - Package: com.example.maven.jaxws.helloclient  

      • Finish 버튼을 클릭하여 프로젝트를 작성합니다.
        NetBeans Projects 창에 helloclient(jar)가 표시되어야 합니다. helloclient용의 pom.xml 파일에는 상위 프로젝트 jaxws-maven-sample에 대한 참조가 들어 있으며, jaxws-maven-sample용의 pom.xml 파일은 이제 helloclient용 모듈을 지정합니다.

    • helloclient용의 의존 관계와 파일 중에서 필요 없는 것을 삭제합니다.  

      • Projects 탭 옆에 있는 Files 탭을 클릭합니다.
      • Files 창에서 helloclient 아래의 src 디렉토리를 확장하고 test 디렉토리를 마우스 오른쪽 버튼으로 클릭한 후 Delete를 선택합니다.  

      • OK 버튼을 클릭합니다.

      jaxws-maven-samplepom.xml 파일에 이제 jaxws-rt.jar에 대한 컴파일 타임 의존 관계가 포함되며 컴파일 범위를 지정하는 것을 볼 수 있습니다. jaxws-rt.jar 파일은 런타임 시 서비스 및 클라이언트에서 사용할 수 있어야 합니다.  

      GlassFish에는 JAX-WS가 포함되므로 GlassFish를 배포 컨테이너로 사용할 경우 Scope 값을 "provided"로 설정할 수 있습니다. 이 경우 Maven은 "skinny" WAR 파일을 만들며 WAR 파일에 jax-ws jar 파일이 번들로 포함되지 않습니다.  

    • JAX-WS JAR에 대한 리포지토리 정보를 추가합니다. Maven은 이 정보를 사용하여 jaxws-maven-plugin과 해당 의존 관계 아티팩트를 가져옵니다.  

      • jaxws-maven-sample에 대한 Project Files 노드를 확장하고 pom.xml 파일을 엽니다.
      • JAX-WS JAR를 다운로드하기 위한 다음 리포지토리 정보를 추가합니다.  

           <repositories>
             <repository>
               <id>maven-repository.dev.java.net</id>
               <name>Java.net Repository for Maven 1</name>
               <url>http://download.java.net/maven/1/</url>
               <layout>legacy</layout>
             </repository>
             <repository>
               <id>maven2-repository.dev.java.net</id>
               <name>Java.net Repository for Maven 2</name>
               <url>http://download.java.net/maven/2/</url>
             </repository>
           </repositories>  


      이 코드는 Maven 1 및 Maven 2 리포지토리 모두에 대한 정보를 추가합니다. 두 리포지토리에는 몇 가지 JAX-WS 의존 관계가 존재합니다.  

    • 다음과 같이 jaxws-maven-plugin에 대한 플러그인 리포지토리 정보를 pom.xml 파일에 추가합니다.  

         <pluginRepositories>
           <pluginRepository>
             <id>maven2-repository.dev.java.net</id>
             <url>http://download.java.net/maven/2/</url>
           </pluginRepository>
         </pluginRepositories>  

      모든 구성 사양은 상위 프로젝트의 pom.xml 파일에 있기 때문에 하위 프로젝트인 helloservicehelloclient는 구성을 공유합니다.


웹 서비스 구축

  1. helloservice에 로직을 추가합니다  

    • helloservice 프로젝트에서 SourcePackages 노드를 마우스 오른쪽 버튼으로 클릭합니다.
    • New를 선택한 다음 Java Class를 선택합니다.
    • New Java Class 창에서 다음과 같이 지정합니다.  

          - Class Name: Hello
          - Package: com.example.maven.jaxws.helloservice  

    • Finish 버튼을 클릭합니다.
    • Hello 클래스에 대한 소스 코드를 업데이트하여 WebService로 주석을 달고 sayHello를 포함합니다. 업데이트된 소스 코드는 다음과 같아야 합니다.  

         package com.example.maven.jaxws.helloservice;
         import javax.jws.WebService;
         @WebService
         public class Hello {
           public String sayHello(String param) {
           ;  return "Hello " + param;
           }
         }  


  2. SEI 클래스에서 jaxws-maven-plugin:wsgen을 실행합니다.  

    • helloservicepom.xml 파일을 엽니다.
    • pom.xml 파일의 빌드 섹션 아래에 다음 코드를 추가합니다.
       

            <plugins>      
              <plugin>
              <groupId>org.codehaus.mojo&lg;/groupId>
              <artifactId>jaxws-maven-plugin&lg;/artifactId>
                <executions>
                  <execution>
                    <goals>
                      <goal>wsgen</goal>
                    </goals>
                    <configuration>
                    <sei>com.example.maven.jaxws.helloservice.Hello
                    </sei>
                    <!--for demo purpose only, the webapp does not-->
                    <!--need the generated wsdl files-->
                    <genWsdl>true</genWsdl>          
                    <keep>true&lg;/keep>
                    </configuration>
                  </execution>
                </executions>
              </plugin>
            </plugins>
       


    앞에서 언급했듯이 jaxws-maven-plugin:wsgen 작업은 프로세스 클래스 수명 주기 단계 중에 자동으로 호출됩니다. <sei> 요소 값 com.example.maven.jaxws.helloservice.Hello는 작업에 매개변수로 전달됩니다.


웹 서비스 배포

  1. 배포 정보를 지정합니다.  

    • GlassFish나 다른 Java EE 5 컨테이너를 사용하여 웹 서비스를 배포할 경우 "2.5" 버전을 사용하도록 기본 web.xml 파일을 변경합니다. 이를 수행하려면 다음과 같이 합니다.  

          - helloservice 프로젝트에서 Web Pages 노드를 확장합니다.
          - WEB-INF 노드를 확장하고 web.xml 파일을 선택합니다.
          - 소스 편집기 창 상단에 있는 XML 보기 버튼을 눌러 파일의 XML 컨텐츠를 표시합니다.
          - web.xml 파일의 컨텐츠를 다음과 같이 바꿉니다.  

         <web–app version="2.5"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema–instance"
             xsi:schemaLocation=
             "http://java.sun.com/xml/ns/javaee
             http://java.sun.com/xml/ns/javaee/web–app_2_5.xsd">
           <welcome–file–list>
           <welcome–file>index.jsp</welcome–file>
           </welcome–file–list>
         </web–app>  

      파일 시작 부분의 <!DOCTYPE> 요소를 반드시 삭제해야 합니다.  

          - 파일을 저장합니다.  


  2. GlassFish에 아티팩트를 배포합니다.  

    • helloservice 프로젝트를 마우스 오른쪽 버튼으로 클릭한 후 Properties를 선택합니다.
    • Run 범주에서 다음과 같이 지정합니다.  

          - Server: GlassFish v2
          - Context Path: /helloservice
          - OK 버튼을 클릭합니다.  

    Display Browser on Run 확인란을 선택하고 Relative URL 필드에 HelloService?wsdl을 입력할 수도 있습니다. 이러한 선택적 사양을 지정할 경우 NetBeans는 helloservice 서비스가 배포된 후 helloservice WSDL을 보여 주는 브라우저를 엽니다.
    설정이 적용되어 helloservicepom.xml 파일은 아티팩트를 GlassFish에 배포하도록 업데이트됩니다.


서비스 실행

  • helloservice를 마우스 오른쪽 버튼으로 클릭하고 Run을 선택합니다.  

    NetBeans에서 Maven이 실행되어 웹 애플리케이션이 빌드되고 GlassFish에 WAR 파일이 자동으로 배포됩니다. NetBeans Output 창에서 진행 과정을 볼 수 있습니다. 서비스의 WSDL에 액세스하여 서비스가 성공적으로 배포되었는지를 확인할 수 있습니다. 이전 단계에서 설명한 대로 Display Browser on Run 확인란을 선택했을 경우 NetBeans는 배포된 웹 서비스의 WSDL을 보여 주는 브라우저를 엽니다. Display Browser on Run 확인란을 선택하지 않았을 경우에는 브라우저에서 http://localhost:8080/helloservice/HelloService?wsdl을 직접 열어서 웹 서비스의 WSDL을 볼 수 있습니다.


클라이언트를 만들어 웹 서비스 호출하기

  1. helloservice WSDL에서 jaxws-maven-plugin:wsimport를 실행합니다.  

    • helloclientpom.xml 파일을 엽니다.
    • pom.xml 파일에 다음 코드를 추가합니다.  

         <build>
           <plugins>
             <plugin>
               <groupId>org.codehaus.mojo</groupId>
                 <artifactId>jaxws-maven-plugin</artifactId>
                 <executions>
                   <execution>
                     <goals>
                       <goal>wsimport</goal>
                     </goals>
                     <configuration>
                       <wsdlUrls>
                         <wsdlUrl>
               http://localhost:8080/helloservice/HelloService?wsdl
                         </wsdlUrl>
                       </wsdlUrls>
                   <packageName>com.example.maven.jaxws.helloclient
                   </packageName>
                     </configuration>
                   </execution>
                 </executions>
             </plugin>
           </plugins>
         <bulid>
     

    jaxws-maven-plugin:wsimport 작업은 수명 주기 단계 생성 소스 중에 실행됩니다. 위의 구성에서 볼 수 있듯이 wsimporthttp://localhost:8080/helloservice/HelloService?wsdl에 있는 WSDL에서 실행되어 com.example.maven.jaxws.helloclient 패키지에 자바 클래스를 생성합니다.  

  2. 클라이언트를 빌드합니다.  

    • helloclient 프로젝트를 마우스 오른쪽 버튼으로 클릭한 후 Build를 선택합니다. Maven은 프로젝트를 빌드하고 wsimport를 실행하여 대상 폴더에 모든 웹 서비스 아티팩트를 생성합니다. 생성된 파일을 보려면 Files 창을 열고 helloclient/target을 확장합니다.
    • helloclient 프로젝트에서 Source packages 노드를 확장하고 com.example.maven.jaxws.helloclient를 마우스 오른쪽 버튼으로 클릭합니다.
    • New를 선택한 다음 Java class를 선택합니다.
    • 클래스 이름을 HelloClient로 지정합니다.
    • Finish 버튼을 클릭합니다.
    • HelloClient 클래스를 다음 소스 코드와 같이 업데이트합니다.  

         package com.example.maven.jaxws.helloclient;
         public class HelloClient {
           public static void main(String[] args) {
           HelloService service = new HelloService();
           Hello port= service.getHelloPort();
           System.out.println(port.sayHello("Duke"));
           }
         }  

  3. NetBeans IDE 액션 "Run"을 연결하여 jar 파일을 빌드하고 HelloClient를 실행합니다.  

    • helloclient를 마우스 오른쪽 버튼으로 클릭하고 Properties를 선택합니다.
    • Run 범주에서 Maincom.example.maven.jaxws.helloclient.HelloClient를 입력합니다.
    • OK 버튼을 클릭합니다.


클라이언트 실행

  • helloclient를 마우스 오른쪽 버튼으로 클릭하고 Run을 선택합니다.  

    Maven은 WSDL 파일에서 wsimport를 실행하고 자바 클래스를 생성한 후 HelloClient를 컴파일하여 실행합니다. NetBeans Output 창에 다음과 같은 웹 서비스 호출 결과가 표시되어야 합니다.  

       Hello Duke

요약

Maven을 사용하여 JAX-WS 기반의 웹 서비스를 손쉽게 만들 수 있습니다. 이 팁에서는 NetBeans를 사용하여 웹 서비스를 생성하는 방법을 설명했지만 NetBeans를 사용하지 않고 Maven을 사용하여 수동으로 JAX-WS 기반의 웹 서비스를 생성할 수도 있습니다. 이렇게 하려면 mvn CLI를 사용하여 pom 파일을 필요한 대로 편집합니다. 그러나 NetBeans를 사용하면 프로젝트에서 Maven을 보다 손쉽게 사용할 수 있으며 구성 구문을 몰라도 간단히 수행할 수 있습니다.

Maven을 사용하여 JAX-WS 기반의 웹 서비스를 작성하는 것에 대한 자세한 내용은 Metro User's Guide를 참조하십시오.


저자 정보

Rama Pulavarthi는 썬마이크로시스템즈 자바 웹 서비스 그룹의 기술 스탭 중 한 명으로서, 현재 JAX-WS 참조 구현 개발에 참여하고 있습니다. 이전에는 JAX-RPC의 소프트웨어 품질 공학 연구를 주도했습니다.

이 글의 영문 원본은
http://blogs.sun.com/enterprisetechtips/entry/using_jax_ws_with_maven
에서 보실 수 있습니다.

댓글 없음:

댓글 쓰기