제5장 Ant Task

내용 목차

5.1. 개요
5.2. 서버 제어 Ant Task
5.2.1. boot
5.2.2. down
5.2.3. 실행하기
5.3. EJB Ant Task
5.3.1. appcompiler
5.3.2. ejbddinit
5.4. Deployment Ant Task
5.4.1. deploy
5.4.2. modulecommand Task
5.4.3. 실행하기
5.5. 웹 서비스 Ant Task
5.5.1. java2wsdl
5.5.2. wsdl2java
5.5.3. wsgen
5.5.4. wsimport
5.5.5. xjc
5.5.6. schemagen

본 장에서는 Ant Task에 대해서 설명한다.

5.1. 개요

JEUS에서는 애플리케이션을 개발하면서 특정 작업을 자동하기 위해 다음과 같은 Ant Task를 제공한다. 사용자는 Ant를 통해 실행해야 할 Task를 기술한 Build 파일을 작성해야 한다.

본 절에서는 각 기능들의 Build 파일에 기술되어야 할 내용들에 대해서 설명하고, 이를 통해 각 Ant Task를 실행하는 과정을 설명한다. Ant에 대한 설정법과 사용법은 http://ant.apache.org를 참조한다.

Build 파일 : build.xml

build.xml은 Ant Task를 기술한 XML 형식의 Ant Build 파일이다. Build 파일의 중요한 부분은 <project>에 포함되어 있으며, 일반적으로 1개의 프로젝트에 여러 개의 <target>이 존재한다. <target>은 실제 실행해야 하는 Ant Task작업을 정의한다.

JEUS에서 제공하는 Ant Task를 사용하기 위해서는 다음과 같이 Task definition을 build.xml에 추가해야 한다.

<taskdef resource="jeus/util/ant/jeusant.properties">
    <classpath>
        <path refid="jeus.libraries"/>
    </classpath>
</taskdef>

프로젝트의 속성들은 <project>의 하위에 정의하며, ${property-name}의 표현식을 통해 프로젝트 내에서 속성 값들을 사용할 수 있다.

주의

JEUS에서 제공하는 Ant Task를 이용할 때, 주의할 점으로 가급적 Build 파일의 project에 "jeus.home"을 설정해주는 것이 안전하다. 이는 하나의 project에서 다수의 서로 다른 target을 수행할 때, 특정 target은 JEUS_HOME 정보를 필요로 하는 것이 존재할 수 있다.

JEUS_HOME은 static final 변수여서 하나의 JVM에서 처음 설정되는 값으로 고정되는 특징이 있다. 만약 JEUS_HOME 정보가 필요없는 target이 먼저 수행이되면, JEUS_HOME에 null 값이 설정되며, 다음 순서로 JEUS_HOME이 필요한 target이 수행될 때, 앞의 target이 설정한 JEUS_HOME의 값을 이용하게 되므로 원하는 동작과 다르게 동작할 수 있다.

5.2. 서버 제어 Ant Task

본 절에서는 서버를 제어하는 Ant Task를 설명한다.

5.2.1. boot

boot Task는 JEUS를 기동한다.

다음은 boot Task의 속성에 대한 설명이다.

[표 5.1] boot Task 속성

속성설명
node기동할 JEUS의 노드 이름을 설정한다. (필수 입력항목)
userJEUS 사용자명이다. (필수 입력항목)
passwordJEUS 패스워드이다. (필수 입력항목)


5.2.2. down

down Task는 JEUS를 종료한다.

다음은 down Task 속성에 대한 설명이다.

[표 5.2] down Task 속성

속성설명
node기동할 JEUS의 노드 이름을 설정한다. (필수 입력항목)
jeusexitjeusexit 명령어를 실행할지 여부를 설정한다. (기본값: false)
userJEUS 사용자명이다. (필수 입력항목)
passwordJEUS 패스워드이다. (필수 입력항목)


5.2.3. 실행하기

build.xml을 작성한 예제와 build.xml을 통해 JEUS boot/down을 실행하는 예제에 대해 설명한다.

build.xml 작성 예제

다음은 johan이라는 노드 이름을 가진 JEUS 서버를 boot, down하는 작업에 대한 build.xml 예제이다.

[예 5.1] boot & down Ant Task build 파일 예제

<?xml version="1.0"?>
<project name="example" default="boot" basedir=".">
  <property environment="env"/>
  <!-- jeus.home project property is required
       when you run the various tasks in an ant jvm and
       one of the various tasks requirs JEUS_HOME information -->
  <property name="jeus.home" value="${env.JEUS_HOME}"/>
  <!-- jeus.baseport is required to connect JEUS manager -->
  <property name="jeus.baseport" value="${env.JEUS_BASEPORT}"/>

  <!-- set properties to be needed for boot & down task -->
  <property name="node.name" value="nodename"/>
  <property name="username" value="username"/>
  <property name="password" value="password"/>
  <property name="jeusexit" value="false"/>

  <!-- set the library-classpath or to run the task class -->
  <path id="jeus.libraries">
    <fileset dir="${jeus.home}/lib/system" includes="*.jar"/>
  </path>

  <!-- include the task definition resource file -->
  <taskdef resource="jeus/util/ant/jeusant.properties">
    <classpath>
      <path refid="jeus.libraries"/>
    </classpath>
  </taskdef>

  <target name="init">
  </target>

  <!-- boot task -->
  <target name="boot" depends="init">
    <boot node="${node.name}"
          username="${username}"
          password="${password}"/>
  </target>

  <!-- down task -->
  <target name="down" depends="init">
    <down node="${node.name}"
          jeusexit="${jeusexit}"
          username="${username}"
          password="${password}"/>
  </target>
</project>


실행 예제

JEUS를 기동하기 위해서는 jeus 명령어를 통해 JEUS Manager가 Started(standby) 상태여야 한다. 이 상태에서 boot 명령을 실행하면 Booted(running) 상태가 되고, 여기서 down 명령을 실행하면 다시 Started(standby) 상태가 된다.

  • boot

    c:\jeus>ant boot
    Buildfile: build.xml
    
    init:
    
    boot:
         [boot] johan boot done
         [boot] johan_container1
         [boot] johan_container2
    
    BUILD SUCCESSFUL
    Total time: 1 minute 12 seconds
  • down

    c:\jeus>ant down
    Buildfile: build.xml
    
    init:
    
    down:
         [down] johan down successful
    
    BUILD SUCCESSFUL
    Total time: 9 seconds

5.3. EJB Ant Task

JEUS를 기반으로 EJB 컴포넌트를 개발할 때 작업을 편리하게 수행할 수 있도록 몇 가지의 Ant Task를 제공한다. EJB 개발에 필요한 Ant Task 중에는 디플로이에 관련 Task가 있는데, 이에 대해서는 “5.4. Deployment Ant Task”를 참고한다.

5.3.1. appcompiler

appcompiler Ant Task는 pre-deployment 작업 후 EJB 모듈 혹은 개별적인 EJB Bean에 대해서 필요한 RMI Stub과 Skeleton 클래스를 임의로 생성하고 싶을 때 사용한다. 또한 이것은 클라이언트에서 원격지에 있는 디플로이된 Bean과 통신할 때 필요한 클래스 파일들 즉 EJB 클라이언트 JAR를 생성할 수 있다.

appcompiler Task 속성

다음은 appcompiler Task 속성에 대한 설명이다.

[표 5.3] appcompiler Task 속성

속성설명
jeusHomeJEUS_HOME을 설정한다.
client생성될 Stub 클래스들이 포함될 클라이언트 뷰 파일을 설정한다.
keep컴파일 과정에서 생성된 소스를 유지할 것인지를 설정한다. (기본값: false)

servlet-mapping table(jeus_jspmap.xml)을 생성할 것인지를 설정한다.

(기본값: false)

ejbJar컴파일할 때 사용할 ejb-jar.xml 파일을 설정한다.
jeusEjbDd컴파일할 때 사용할 jeus-ejb-dd.xml 파일을 설정한다.
nameDeploy에 사용할 이름을 설정한다.
target컴파일할 대상 애플리케이션, stand-alone 모듈 파일을 설정한다. (필수 입력항목)

appcompiler Task 실행하기

다음은 build.xml을 작성한 예제와 build.xml을 통해 appcompiler를 실행시키는 예제이다.

  • build.xml 작성 예제

    [예 5.2] appcompiler Ant Task build 파일 예제

    <?xml version="1.0"?>
    <project name="example" default="appcompiler" basedir=".">
      <property environment="env"/>
      <!-- jeus.home project property is required
           when you run the various tasks in an ant jvm and
           one of the various tasks requirs JEUS_HOME information -->
      <property name="jeus.home" value="${env.JEUS_HOME}"/>
    
      <!-- set properties to be needed for appcompiler task -->
      <property name="client" value="client_view.jar"/>
      <property name="keep" value="false"/>
      <property name="jspmap" value="false"/>
      <property name="ejbjar" value="ejb-jar.xml"/>
      <property name="jeusejbdd" value="jeus-ejb-dd.xml"/>
      <property name="targetfile" value="ejb"/>
    
      <!-- set the library-classpath or to run the task class -->
      <path id="jeus.libraries">
        <fileset dir="${jeus.home}/lib/system" includes="*.jar"/>
      </path>
    
      <!-- include the task definition resource file -->
      <taskdef resource="jeus/util/ant/jeusant.properties">
        <classpath>
          <path refid="jeus.libraries"/>
        </classpath>
      </taskdef>
    
      <target name="init">
      </target>
    
      <!-- appcompiler task -->
      <target name="appcompiler" depends="init">
        <appcompiler jeusHome="${jeus.home}"
                     client="${client}"
                     keep="${keep}"
                     jspmap="${jspmap}"
                     ejbJar="${ejbjar}"
                     jeusEjbDd="${jeusejbdd}"
                     target="${targetfile}"/>
      </target>
    </project>

  • 실행 예제

    c:\jeus>ant appcompiler
    Buildfile: build.xml
    
    init:
    
    appcompiler:
    [appcompiler] -----------------------------------------------------------------
    [appcompiler] try to compile ejb module ejb
    [appcompiler] ejb module ejb is compiled successfully
    [appcompiler] -----------------------------------------------------------------
    
    BUILD SUCCESSFUL
    Total time: 3 minutes 7 seconds

5.3.2. ejbddinit

ejbddinit Ant Task는 EJB 애플리케이션에 대해 JEUS EJB Deployment Descriptor(DD)를 생성할 때 이용한다. ejbddinit에 대한 설명은 “4.5. ejbddinit”를 참고한다.

ejbddinit Task 속성

다음은 ejbddinit Task 속성에 대한 설명이다.

[표 5.4] ejbddinit Task 속성

속성설명
propertyFileejbddinit을 실행할 때 참조할 프로퍼티 파일을 지정한다. 자세한 내용은 절 4.5. “프로퍼티”를 참고한다.
logginginglevelejbddinit이 사용할 logging 레벨을 지정한다. 이 레벨은 J2SE logging API의 레벨을 따른다. (기본값: INFO)
targetejbddint을 실행하기 위한 jar archive 파일이다. 또는 이를 풀어둔 디렉터리의 경로이다. (필수 입력항목, 프로퍼티 파일이 target정보를 가졌을 경우에는 없어도 무방하다.)

build.xml에 ejbddinit 프로퍼티 설정하기

build.xml에 제한적으로 ejbddinit 프로퍼티를 설정할 수 있다. ejbddinit 프로퍼티에 대한 자세한 내용은 절 4.5. “프로퍼티”를 참고한다.

다음은 build.xml에서 ejbddinit 프로퍼티 파일의 프로퍼티 설정이 변경되어야 하는 방식에 대한 예이다. ejbddinit 프로퍼티 파일에서 설정할 수 있는 모든 프로퍼티가 동일한 변경 방식을 따른다.

[표 5.5] ejbddinit 프로퍼티 파일과 build.xml에서의 ejbddinit 프로퍼티 설정 예

ejbddinit 프로퍼티 파일build.xml
export-name=%{ejb-class}<property name="export-name" value="%{ejb-class}"/>
thread-max=10000<property name="thread-max" value="10000"/>
HelloBean.export-port=55555build.xml에서는 특정 EJB 컴포넌트(HelloBean)에 대한 ejbddinit 프로퍼티 설정이 불가능

ejbddinit 프로퍼티 파일과 같이 build.xml에서도 export-name 설정에 '%{ejb-class}'와 같은 패턴을 사용할 수 있다. export-name 설정과 관련된 패턴 사용에 관한 내용은 절 4.5. “프로퍼티”를 참고한다.

build.xml에서는 특정 EJB 컴포넌트에 대한 ejbddinit 프로퍼티 설정은 지원하지 않으므로 특정 EJB 컴포넌트에 대한 ejbddinit 프로퍼티 설정이 필요한 경우에는 ejbddinit 프로퍼티 파일을 따로 작성해야 한다. 특정 EJB 컴포넌트에 대한 설정은 ejbddinit 프로퍼티 파일과 build.xml의 공통 설정보다 우선한다. ejbddinit 프로퍼티 파일과 build.xml에 동일한 설정이 존재할 경우에는 build.xml의 설정을 우선한다.

ejbddinit Task 실행하기

다음은 build.xml을 작성한 예제와 build.xml을 통해 ejbddinit을 실행하는 예제에 대한 설명이다.

  • build.xml 작성 예제

    [예 5.3] ejbddinit Ant Task build 파일 예제

    <?xml version="1.0"?>
    <project name="example" default="ejbddinit" basedir=".">
      <property environment="env"/>
      <!-- jeus.home project property is required
           when you run the various tasks in an ant jvm and
           one of the various tasks requirs JEUS_HOME information -->
      <property name="jeus.home" value="${env.JEUS_HOME}"/>
    
      <!-- set properties to be needed for ejbddinit task -->
      <property name="targetfile" value="ejb"/>
      <property name="logginglevel" value="FINE"/>
      <property name="propertyfile" value="ejbddinit.property"/>
      
      <!-- set properties to be needed for ejbddinit properties -->
      <property name="export-name" value="%{ejb-class}"/>
      <property name="thread-max" value="10000"/>
    
      <!-- set the library-classpath or to run the task class -->
      <path id="jeus.libraries">
        <fileset dir="${jeus.home}/lib/system" includes="*.jar"/>
      </path>
    
      <!-- include the task definition resource file -->
      <taskdef resource="jeus/util/ant/jeusant.properties">
        <classpath>
          <path refid="jeus.libraries"/>
        </classpath>
      </taskdef>
      
      <target name="init">
      </target>
    
      <!-- ejbddinit task -->
      <target name="ejbddinit" depends="init">
        <ejbddinit loggingLevel="${logginglevel}"
                   property="${propertyfile}"
                   target="${targetfile}"
                   exportName="${export-name}"
                   threadMax="${thread-max}">
        </ejbddinit>
      </target>
    </project>

  • 실행 예제

    c:\jeus>ant ejbddinit
    Buildfile: build.xml
    
    init:
    
    ejbddinit:
    [ejbddinit] loadFile : c:\jeus\ejbddinit.property
    [ejbddinit] Source=c:\jeus\sample\ejbddinit\ejb.jar
    [ejbddinit] parameters setting successful..
    [ejbddinit] DD Init Started..
    [ejbddinit] Creating jeus descriptors
    [ejbddinit] DD Init finished..
    
    BUILD SUCCESSFUL
    Total time: 6 seconds

5.4. Deployment Ant Task

본 절에서는디플로이와 관련한 Ant Task에 대해 설명한다.

5.4.1. deploy

deploy Task는 지정한 Java EE 애플리케이션을 JEUS 서버에 배치한다.

다음은 deploy Task 속성에 대한 설명이다.

[표 5.6] deploy Task 속성

속성설명
targetNames

디플로이할 target을 설정한다. (필수 입력항목)

Target들로 엔진 컨테이너가 오며, 각 target들은 콤마(,)로 구분한다.

modulePath애플리케이션 또는 모듈의 경로를 설정한다. (필수 입력항목)
registeredAppName

JEUSMain.xml에 등록된 애플리케이션 또는 모듈의 이름을 설정하며, 해당 애플리케이션 정보를 이용하여 디플로이를 수행한다.

(*) 이 속성은 다른 속성들과 함께 이용할 수 없다. 이 속성은 접속하려는 JEUS 노드가 로컬 호스트일 때만 유효하다.

planPath

애플리케이션 또는 모듈의 plan 파일 경로를 설정한다. 이 값을 설정하지 않으면 모듈 내부에서 plan 파일을 찾는다.

예를 들어, jeus-application-dd.xml 파일을 가진 jar archive 파일인 myApp_plan.jar을 plan 파일로 지정한다.

fastDeployFast Deploy를 설정한다.
classloadingclass loading mode를 설정한다.
onlyDistribute디플로이 단계에서 distribute까지만 실행할 것인지를 설정한다. (기본값: false)
permanentDeploy이 애플리케이션을 디플로이(영구 디플로이)한 후 JEUSMain.xml에 해당 애플리케이션 정보를 등록한다. (기본값: false)
twoPhase2단계 배치를 설정한다. (기본값: false)
deployURI

URI를 설정한다. (필수 입력항목)

  • 형식

    deployer:Jeus:${node_name}::${security_domain}:${jndi_protocol}

    ${security_domain}에는 JEUS에 적용되고 있는 보안 도메인을, ${jndi_protocol}에는 현재 클라이언트만 가능하다.

  • deployer:Jeus:node

    (*)security_domain과 jndi_protocol 생략 가능하다. Default는 SYSTEM_DOMAIN과 클라이언트이다.

    deployer:Jeus:node:SYSTEM_DOMAIN:client

userJEUS 사용자명이다. (필수 입력항목)
passwordJEUS 패스워드이다. (필수 입력항목)


5.4.2. modulecommand Task

deploy 외 다른 administrative operation을 실행하는 Task로 다음의 3가지 target을 가지고 있다.

target설명
start애플리케이션 시작하기
stop애플리케이션 정지하기
undeploy애플리케이션 제거하기

다음은 modulecommand Task의 파라미터에 대한 설명이다.

[표 5.7] modulecommand Task 파라미터

파라미터설명
commandstatus에서 실행할 target의 명령어를 설정한다. start, stop, undeploy의 3가지 명령어가 있다. (필수 입력항목)
moduleName명령어를 실행할 애플리케이션 또는 모듈을 설정한다. (필수 입력항목)
registeredAppName

JEUSMain.xml에 등록된 애플리케이션 또는 모듈의 이름을 설정하며, 해당 애플리케이션 정보를 이용하여 Undeploy를 수행한다.

(*) 이 속성은 Undeploy 명령어에서만 유효하며, 다른 속성들과 함께 이용할 수 없다. 이 속성은 접속하려는 JEUS 노드가 로컬 호스트일 때만 유효하다.

moduleType

명령어를 실행할 모듈의 타입을 설정한다.

  • J2EEApplication

  • EJBModule

  • WebModule

  • ResourceAdapterModule

  • AppClient Module

targetNames디플로이 대상을 설정한다. (필수 입력항목)
permanentUndeploy

이 애플리케이션을 Undeploy한 후 JEUSMain.xml에 해당 애플리케이션 정보를 제거한다(영구 제거).

(*) 이 속성은 Undeploy 명령어에서만 유효하다. (기본값: false)

deployURIURI를 설정한다. (필수 입력항목)
userJEUS 사용자명이다. (필수 입력항목)
passwordJEUS 패스워드이다. (필수 입력항목)

5.4.3. 실행하기

build.xml을 작성한 예제와 build.xml을 통해 애플리케이션 디플로이를 실행하는 예제에 대한 설명이다.

build.xml 작성 예제

[예 5.4] Deployment Ant Task build 파일 예제

<?xml version="1.0"?>
<project name="example" default="deploy" basedir=".">
  <property environment="env"/>
  <!-- jeus.home project property is required
       when you run the various tasks in an ant jvm and
       one of the various tasks requirs JEUS_HOME information -->
  <property name="jeus.home" value="${env.JEUS_HOME}"/>
  <!-- jeus.baseport is required to connect JEUS manager -->
  <property name="jeus.baseport" value="${env.JEUS_BASEPORT}"/>

  <!-- set properties to be needed for deployment task -->
  <property name="node.name" value="nodename"/>
  <property name="target.name"
            value="${node.name}_container1,${node.name}_container2"/>
  <property name="source.path" value="${jeus.home}/webhome/app_home/myApp.ear"/>
  <property name="registered.app.name" value="myApp"/>
  <property name="plan.path" value="myApp_plan.jar"/>
  <property name="module.name" value="myApp"/>
  <property name="isOnlyDistribute" value="false"/>
  <property name="isPermanentDeploy" value="false"/>
  <property name="isPermanentUndeploy" value="false"/>
  <!-- module.type: J2EEApplication, EJBModule, WebModule,
                    AppClientModule, ResourceAdapterModule -->
  <property name="module.type" value="J2EEApplication"/>
  <property name="uri" value="deployer:Jeus:${node.name}"/>
  <property name="user" value="username"/>
  <property name="password" value="password"/>

  <!-- set the library-classpath or to run the task class -->
  <path id="jeus.libraries">
    <fileset dir="${jeus.home}/lib/system" includes="*.jar"/>
  </path>

  <!-- include the task definition resource file -->
  <taskdef resource="jeus/util/ant/jeusant.properties">
    <classpath>
      <path refid="jeus.libraries"/>
    </classpath>
  </taskdef>

  <target name="init">
  </target>

  <!-- deploy task -->
  <target name="deploy" depends="init">
    <deploy targetNames="${target.name}"
            modulePath="${source.path}"
            planPath="${plan.path}"
            onlyDistribute="${isOnlyDistribute}"
            permanentDeploy="${isPermanentDeploy}"
            deployURI="${uri}"
            user="${user}"
            password="${password}"/>
  </target>

  <!-- deploy task for the application registered in JEUSMain.xml -->
  <target name="deploy_withRegisteredApp" depends="init">
    <deploy registeredAppName="${registered.app.name}"
            deployURI="${uri}"
            user="${user}"
            password="${password}"/>
  </target>

  <!-- modulecommand task : start - set the command attribute 'start' -->
  <target name="start" depends="init">
    <modulecommand command="start"
                   moduleName="${module.name}"
                   moduleType="${module.type}"
                   targetNames="${target.name}"
                   deployURI="${uri}"
                   user="${user}"
                   password="${password}"/>
  </target>

  <!-- modulecommand task : stop - set the command attribute 'stop' -->
  <target name="stop" depends="init">
    <modulecommand command="stop"
                   moduleName="${module.name}"
                   moduleType="${module.type}"
                   targetNames="${target.name}"
                   deployURI="${uri}"
                   user="${user}"
                   password="${password}"/>
  </target>

  <!-- modulecommand task : undepoy - set the command attribute 'undepoy' -->
  <target name="undeploy" depends="init">
    <modulecommand command="undeploy"
                   moduleName="${module.name}"
                   moduleType="${module.type}"
                   targetNames="${target.name}"
                   permanentUndeploy="${isPermanentUndeploy}"
                   deployURI="${uri}"
                   user="${user}"
                   password="${password}"/>
  </target>
</project>

실행 예제

Deployment Ant Task를 실행하기 전에는 반드시 ANT_OPTS(환경변수)에 다음을 추가한다.

-Djava.endorsed.dirs=JEUS_HOME\lib\endorsed

  • deploy

    c:\jeus>ant deploy
    Buildfile: build.xml
    
    init:
    
    deploy:
    
    BUILD SUCCESSFUL
    Total time: 2 minutes 26 seconds

  • stop

    c:\jeus>ant stop
    Buildfile: build.xml
    
    init:
    
    stop:
    
    BUILD SUCCESSFUL
    Total time: 11 seconds

  • start

    c:\jeus>ant start
    Buildfile: build.xml
    
    init:
    
    start:
    
    BUILD SUCCESSFUL
    Total time: 5 seconds

  • undeploy

    c:\jeus>ant undeploy
    Buildfile: build.xml
    
    init:
    
    undeploy:
    
    BUILD SUCCESSFUL
    Total time: 6 seconds

5.5. 웹 서비스 Ant Task

본 절에서는 JEUS에서 웹 서비스 생성과 웹 서비스 클라이언트를 위해 제공하는 Ant Task에 대해서 설명한다.

5.5.1. java2wsdl

java2wsdl Task는 service endpoint interface 클래스(그리고 임의의 Java로 구현한 클래스)로부터 다음의 파일을 생성한다.

  • 웹 서비스의 WSDL파일

  • JAX-RPC 매핑 파일

참고

java2wsdl Ant Task를 정의하는 클래스는 'jeus.util.ant.webservices.Java2WsdlTask' 이다.

속성

다음은 java2wsdl의 속성에 대한 설명이다.

[표 5.8] java2wsdl Ant Task 속성

속성설명필수여부Type
configfilepath웹 서비스 설정 파일의 경로를 지정한다.OString
classpath웹 서비스를 구성하는 컴파일된 Java 클래스에 대한 클래스 패스를 지정한다.OString
destDir생성된 WSDL 파일이 놓일 디렉터리의 절대 경로를 지정한다.XString
level로그 레벨을 지정한다.XString
verboseVerbose 메시지를 출력한다.Xboolean

Nested Element

<java2wsdl>은 Ant의 <classpath> element를 가지고 있다.

실행하기

build.xml을 작성한 예제와 이 build.xml을 통해 java2wsdl을 실행시키는 예를 설명한다.

  • build.xml 작성 예제

    [예 5.5] java2wsdl Ant Task build 파일 예제

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="java2wsdl" default="build" basedir=".">
        <property name="is.app-client.module" value="true" />
        <import file="../../common/common-build.xml" />
    
        <taskdef name="java2wsdl"
                 classname="jeus.util.ant.webservices.Java2WsdlTask">
            <classpath refid="jeus.libraries.classpath" />
        </taskdef>
    
        <target name="-post-compile">
            <java2wsdl destDir="${build.classes.dir}"
                       verbose="true"
                       configfilepath="${src.conf}/service-config.xml">
                <classpath refid="classpath" />
            </java2wsdl>
        </target>
    </project>

  • 실행 예제

    c:\jeus>jant
    ...
    
    [java2wsdl] Building Web Services : DocLitEchoService
    [java2wsdl] Generating WSDL File - c:\jeus\build\classes\DocLitEchoService.wsdl
    [java2wsdl] Generating JAX-RPC Mapping File - c:\jeus\build\classes\DocLitEcho
    Service-mapping.xml
    ...
    
    BUILD SUCCESSFUL
    Total time: 11 seconds

5.5.2. wsdl2java

wsdl2java Task는 웹 서비스의 WSDL로부터 다음의 2개 중에 하나를 생성한다.

  • 클라이언트 측 웹 서비스의 Stub Java 소스 코드들

  • 서버 측 웹 서비스의 인터페이스 Java 소스 코드들

참고

wsdl2java Ant Task를 정의하는 클래스는 'jeus.util.ant.webservices.Wsdl2JavaTask' 이다.

속성

다음은 wsdl2java의 속성에 대한 설명이다.

[표 5.9] wsdl2java Task 속성

속성설명필수여부Type
wsdlJava 소스 파일을 생성하기 위해서 사용되는 WSDL의 URL이나 절대 경로를 지정한다.OString
mode

Java 소스 파일을 생성하기 위해서 사용되는 MODE를 지정한다.

(gen:client, gen:server, gen, import:client, import:server, import)

OString
destDir생성된 Java 파일이 놓일 디렉터리의 절대 경로를 지정한다.OString
classDestDir컴파일된 클래스 파일이 생성될 디렉터리를 지정한다.XString
inputMappingJava 클래스를 생성하기 위하여 사용되는 입력 JAX-RPC 매핑 파일을 지정한다.XString
packageWSDL의 모든 Namespace URI에 대한 Java 패키지 이름을 지정한다.XString
outputMapping입력 WSDL에 대한 출력 JAX-RPC 매핑 파일을 지정한다.XString
doCompiletrue일때 생성된Java 소스 파일들은 컴파일 된다. (기본값: true)Xboolean
usernameWSDL의 URL로 접근할 때 필요한 사용자 이름이다.XString
passwordWSDL의 URL로 접근할 때 필요한 패스워드이다.XString
keepSrc

true로 설정하면, 생성된Java 소스 파일들은 삭제되지 않는다.

(기본값: true)

Xboolean
nowrappedtrue로 설정하면, WSDL에 대한 wrapped MODE 탐지를 사용할 수 없다. (기본값: false)Xboolean
dataHandlerOnly“true”로 설정하면, MIME 타입에 대하여 javax.activation.DataHandler를 적용한다. (기본값: false)Xboolean
nodatabinding모든 WSDL massage part에 대하여 javax.xml.soap.SOAPElement를 적용한다. (기본값: false)Xboolean
soapver

stub/tie 클래스에서 사용되는 SOAP 버전을 지정한다.

  • 11: SOAP 1.1(기본값)

  • 12:SOAP 1.2

XString
resolveDir원격의 WSDL 파일(스키마 포함)을 로컬 저장소에 저장할 때 값을 설정할 수 있다.XString
DDGenJEUS의 기본적인 배치 서술자(webservices.xml 파일과 MODE가 web인 경우 web.xml, ejb인 경우 ejb-jar.xml 파일)를 생성하고자 할 때 사용한다.X

String

(web, ejb)

level로그 레벨을 지정한다.XString
verboseVerbose 출력은 “true”일 때 가능하다. (기본값: false)Xboolean

Nested Element

<wsdl2java>는 중첩된 ant의 <classpath>와 <mapping> element를 가지고 있다. <wsdl2java> Ant Task의 구조는 다음과 같다( +는 한 개 이상의 element를 가질 수 있음을 의미 한다).

[그림 5.1] wsdl2java Task 구성

wsdl2java Task 구성


<mapping>

Java 패키지와 WSDL Namespace 사이의 매핑이다. 사용자가 <mapping>을 생략하면, 모든 Namespace URI는 <wsdl2java> element인 package attribute에 기술된 패키지로 매핑된다.

다음은 <mapping>의 속성에 대한 설명이다.

[표 5.10] wsdl2java Task - mapping element 속성

속성설명필수여부Type
packageJava 패키지의 이름이다.OString
namespaceWSDL의 Namespace URI이다.OString

참고

만약 사용자가 <wsdl2java> element의 package attribute를 명시하면, 이 속성 값이 <mapping> element로 설정된 값에 우선한다. 즉, <mapping> element로 설정된 값은 무의미해진다.

실행하기

build.xml을 작성한 예제와 이 build.xml을 통해 wsdl2java를 실행하는 예제를 설명한다.

  • build.xml 작성 예제

    [예 5.6] wsdl2java Ant Task build 파일 예제

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="wsdl2java" default="build" basedir=".">
        <property name="is.app-client.module" value="true" />
        <import file="../../../common/common-build.xml" />
        
        <taskdef name="wsdl2java"
                 classname="jeus.util.ant.webservices.Wsdl2JavaTask">
            <classpath refid="jeus.libraries.classpath" />
        </taskdef>
    
        <target name="-pre-compile">
            <mkdir dir="${build.classes.dir}" />
            <wsdl2java destDir="${build.classes.dir}"
                       verbose="true"
                       mode="import:server"
                       doCompile="true"
                       noDataBinding="true"
                       package="sample.nodatabinding.service"
                       outputmapping="${build.classes.dir}/BookQuoteService-mapping.xml"
                       wsdl="${src.conf}/BookQuoteService.wsdl">
                <classpath refid="classpath" />
            </wsdl2java>
        </target>
    </project>

  • 실행 예제

    c:\jeus>jant
    Buildfile: build.xml
    ...
    
    [wsdl2java] [2007.05.26 21:44:07][2][b044] [client-10] [WSVC-5240] Analyzing WSDL :
    src\conf\BookQuoteService.wsdl
    [wsdl2java] [2007.05.26 21:44:10][2][] [client-10] [WSVC-0687] WSDL processing is
    done.
    ...
    
    BUILD SUCCESSFUL
    Total time: 6 seconds

5.5.3. wsgen

wsgen Task는 service endpoint interface 클래스(그리고 임의의 Java로 구현한 클래스)로부터 다음을 생성한다.

  • Portable Artifacts

  • 웹 서비스의 WSDL파일(옵션)

참고

wsgen Ant Task를 정의하는 클래스는 'jeus.webservices.jaxws.tools.WsGen2' 이다.

속성

다음은 wsgen 속성에 대한 설명이다.

[표 5.11] wsgen Task 속성

속성설명필수여부Type
seiservice endpoint interface 클래스의 이름을 명시한다.OString
destdir생성된 클래스 파일이 놓일 디렉터리의 절대 경로를 지정한다.OString
classpath입력으로 들어오는 클래스 파일들을 찾을 위치를 명시한다.XString
cpclasspath 속성과 같다.XString
resourcedestdirgenwsdl 속성과 함께 사용한다. WSDL 파일을 생성할 위치를 지정한다.XString
sourcedestdir생성되는 소스 파일들의 위치를 명시한다.XString
keep생성되는 파일들을 보존한다.Xboolean
verboseVerbose 메시지를 출력한다Xboolean
genwsdlWSDL 파일이 생성되어야 하는지를 명시한다.Xboolean
protocol

genwsdl 속성과 함께 쓰이며 wsdl:binding Element에 사용될 프로토콜을 명시한다.

기본값은 soap1.1 이며 Xsoap1.2 Xsoap1.2와 같은 값들이 가능하다. Xsoap1.2는 표준은 아니며 extension 속성과 함께 쓰일 수 있다.

XString
servicenamegenwsdl 속성과 함께 사용한다. 생성되는 WSDL 파일의 특정 wsdl:service Element의 이름을 명시할 때 사용한다.XString
portnamegenwsdl 속성과 함께 사용한다. 생성되는 WSDL 파일의 특정 wsdl:portname Element의 이름을 명시할 때 사용된다.XString
extension벤더 특정의 확장성을 명시할때 사용한다. 상호 운용 및 이식성이 떨어질 수 있다.Xboolean
policy웹 서비스 정책 설정 파일을 읽어 들인다.XString

실행하기

build.xml을 작성한 예제와 이 build.xml을 통해 wsgen을 실행한는 예제에 대한 설명이다.

  • build.xml 작성 예제

    [예 5.7] wsgen Ant Task build 파일 예제

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="wsgen" default="build" basedir=".">
        <property name="is.app-client.module" value="true" />
        <import file="../../common/common-build.xml" />
    
        <taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen">
            <classpath refid="jeus.libraries.classpath" />
        </taskdef>
    
        <target name="-post-compile">
            <wsgen sei="fromjava.server.AddNumbersImpl"
                   destdir="${build.classes.dir}"
                   classpath="${build.classes.dir}"
                   resourcedestdir="${build.classes.dir}"
                   sourcedestdir="${build.classes.dir}"
                   genwsdl="true" />
        </target>
    </project>

  • 실행 예제

    c:\jeus>jant
    Buildfile: build.xml
    ...
    
         [echo] Compiling wsgen...
    ...
    
    BUILD SUCCESSFUL
    Total time: 6 seconds

5.5.4. wsimport

wsimport Task는 웹 서비스의 WSDL로부터 다음의 2개 중에 하나를 생성한다

  • 클라이언트 측 웹 서비스의 Stub Java 소스 코드들

  • 서버 측 웹 서비스의 인터페이스 Java 소스 코드들

참고

wsimport Ant Task를 정의하는 클래스는 'jeus.webservices.jaxws.tools.WsImport2' 이다.

속성

다음은 wsimport 속성에 대한 설명이다.

[표 5.12] wsimport Task 속성

속성설명필수여부Type
wsdlJava 소스 파일을 생성하기 위해서 사용되는 WSDL의 URL이나 절대 경로를 지정한다.OString
destDir생성된 Java 파일이 놓일 디렉터리의 절대 경로를 지정한다.OString
sourcedestdir생성된 소스 파일들이 놓일 위치를 지정한다. 이 속성을 지정하면 keep 속성이 자동으로 설정된다.XString
keep생성되는 파일들을 보존한다.Xboolean
verboseVerbose 출력은 “true”일때 가능하다. (기본값: false)Xboolean
binding외부의 JAX-WS 또는 JAXB 바인딩 파일들을 지정한다.XString
extension벤더 특정의 확장성을 명시할때 사용한다. 상호 운용 및 이식성이 떨어질 수 있다.Xboolean
wsdllocationWSDL URI를 이 속성에 명시하면 그 URI 값이 생성되는 service end-point interface와 서비스 인터페이스의 @WebService.wsdlLocation Annotation과 @WebServiceClient.wsdlLocation Annotation에 설정된다.XString
catalogTR9401, XCatalog, OASIS XML Catalog 형식과 같은 외부의 Entity 참조값을 설정할 수 있다. 또한 ant xmlcatalog 타입을 사용할 수 있다.XString
packageWSDL의 모든 Namespace URI에 대한 Java 패키지 이름을 지정한다.XString
target이곳에 지정된 JAXWS 스펙 버젼에 따라 코드를 생성한다.XString
quiet출력 메시지들을 보이지 않게 한다.Xboolean
policy웹 서비스 정책 설정 파일을 읽어 들인다.XString

실행하기

다음은 build.xml을 작성한 예제와 build.xml을 통해 wsimport을 실행하는 예제에 대한 설명이다.

  • build.xml 작성 예제

    [예 5.8] wsimport Ant Task build 파일 예제

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="wsimport" default="build" basedir=".">
        <property name="is.app-client.module" value="true" />
        <import file="../../common/common-build.xml" />
    
        <taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
            <classpath refid="jeus.libraries.classpath" />
        </taskdef>
    
        <target name="-pre-compile">
            <mkdir dir="${build.classes.dir}" />
            <wsimport wsdl="${src.conf}/AddNumbers.wsdl"
                      destDir="${build.classes.dir}"
                      sourcedestdir="${build.classes.dir}"
                      package="fromwsdl.server" />
        </target>
    </project>

  • 실행 예제

    c:\jeus>jant
    Buildfile: build.xml
    ...
    
     [wsimport] Consider using <depends>/<produces> so that wsimport won't do
    unnecessary compilation
     [wsimport] parsing WSDL...
     [wsimport]
     [wsimport]
     [wsimport] generating code...
    ...
    
    BUILD SUCCESSFUL
    Total time: 6 seconds

5.5.5. xjc

xjc Task는 XML 스키마 파일을 Java 프로그래밍 언어로 된 JAXB Content 클래스들로 변환한다.

속성

다음은 xjc 속성에 대한 설명이다.

[표 5.13] xjc Task 속성

속성설명필수여부Type
wsdl컴파일하려는 스키마 파일이다.OString
binding스키마 파일에 적용될 외부 추가 바인딩 파일이다.XString
package이 옵션을 명시하면 생성되는 코드는 이 Java 패키지 하위에 위치한다. 이 옵션은 Command Line의 -p 옵션과 동일한 효과를 갖는다.XString
destdir생성된 코드는 이 디렉터리 하위에 생성된다.OString
readonly

true값일 경우에 Java 소스 파일들은 읽기 가능 모드이다.

(기본값: false)

Xboolean
extensiontrue값일 경우에 XJC 바인딩 컴파일러는 확장 모드로 실행된다. (기본값: false)Xboolean
catalogTR9401, XCatalog, 그리고 OASIS XML Catalog 포맷과 같은 외부 카탈로그 파일을 명시할 때 사용한다.XString
removeOldOutput이 속성이 yes값으로 명시되면 produces Element가 가리키는 파일들은 XJC 바인딩 컴파일러가 소스 파일들을 재컴파일하기 전에 모두 삭제된다.X

String

("yes"/"no")

source사용할 스키마 컴파일러의 버전을 명시한다(1.0/2.0).XString

실행하기

다음은 build.xml을 작성한 예제와 build.xml을 통해 xjc를 실행하는 예제에 대한 설명이다.

  • build.xml 작성 예제

    [예 5.9] xjc Ant Task build 파일 예제

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="xjc" default="build" basedir=".">
        <property name="is.app-client.module" value="true" />
        <import file="../../common/common-build.xml" />
    
        <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
            <classpath refid="jeus.libraries.classpath" />
        </taskdef>
    
        <target name="-pre-compile">
            <mkdir dir="${build.classes.dir}" />
            <xjc schema="${src.conf}/ts.xsd"
                 package="com.tmaxsoft"
                 destdir="${build.classes.dir}">
                <produces dir="${build.classes.dir}/com/tmaxsoft"
                          includes="**/*.java" />
                <classpath refid="jeus.libraries.classpath" />
                <classpath refid="classpath" />
            </xjc>
        </target>
    </project>

  • 실행 예제

    c:\jeus>jant
    Buildfile: build.xml
    
    ...
    
          [xjc] c:\jeus\build\classes\com\tmaxsoft is not found and thus excluded from
    the dependency check
          [xjc] Compiling file:/c:/jeus/src/conf/ts.xsd
          [xjc] Writing output to c:\jeus\build\classes
    
    ...
    
    BUILD SUCCESSFUL
    Total time: 4 seconds

5.5.6. schemagen

schemagen Task는 Java 클래스들에 나타나는 각각의 Namespace에 대해 하나의 스키마 파일을 생성한다.

속성

다음은 schemagen의 속성에 대한 설명이다.

[표 5.14] schemagen Task 속성

속성설명필수여부Type
destdir생성되는 스키마 파일을 위치시킬 디렉터리를 명시한다.XString
classpath클래스패스를 명시한다.XString

실행하기

build.xml을 작성한 예제와 build.xml을 통해 schemagen을 실행하는 예제에 대한 설명이다.

  • build.xml 작성 예제

    [예 5.10] schemagen Ant Task build 파일 예제

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="schemagen" default="build" basedir=".">
        <property name="is.app-client.module" value="true" />
        <import file="../../common/common-build.xml" />
    
        <taskdef name="schemagen" classname="com.sun.tools.jxc.SchemaGenTask">
            <classpath refid="jeus.libraries.classpath" />
        </taskdef>
    
        <target name="-pre-compile">
            <mkdir dir="${build.classes.dir}" />
            <schemagen destdir="${build.classes.dir}">
                <src path="${src.dir}" />
                <classpath refid="jeus.libraries.classpath" />
                <classpath refid="classpath" />
            </schemagen>
        </target>
    </project>

  • 실행 예제

    c:\jeus>jant
    Buildfile: build.xml
    
    ...
    
    [schemagen] Generating schema from 2 source files
    [schemagen] Note: Writing c:\jeus\schema1.xsd
    
    ...
    
    BUILD SUCCESSFUL
    Total time: 5 seconds