1. 웹 서비스 Ant Task

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

1.1. java2wsdl

java2wsdl Task는 SET(Service Endpoint Interface) 클래스와 임의의 Java로 구현한 클래스로부터 다음의 파일을 생성한다.

  • 웹 서비스의 WSDL파일

  • JAX-RPC 매핑 파일

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

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

속성 설명

configfilepath

웹 서비스 설정 파일의 경로를 설정한다. (필수 입력항목, String 타입)

classpath

웹 서비스를 구성하는 컴파일된 Java 클래스에 대한 클래스 패스를 설정한다.

(필수 입력항목, String 타입)

destDir

생성된 WSDL 파일이 놓일 디렉터리의 절대 경로를 설정한다. (String 타입)

level

로그 레벨을 설정한다. (String 타입)

verbose

Verbose 메시지를 출력 여부를 설정한다. (기본값: false)

Nested Element

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

예제

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

  • build.xml 작성 예제

    java2wsdl Ant Task build 파일 예제 : <build.xml>
    <?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>
  • 실행 예제

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

1.2. wsdl2java

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

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

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

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

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

속성 설명

wsdl

Java 소스 파일을 생성하기 위해서 사용되는 WSDL의 URL이나 절대 경로를 설정한다. (필수 입력항목, String 타입)

mode

Java 소스 파일을 생성하기 위해서 사용되는 MODE를 설정한다. (필수 입력항목, String 타입)

다음 중에 하나를 설정한다.

  • gen:client

  • gen:server

  • gen

  • import:client

  • import:server

  • import

destDir

생성된 Java 파일이 놓일 디렉터리의 절대 경로를 설정한다.

(필수 입력항목, String 타입)

classDestDir

컴파일된 클래스 파일이 생성될 디렉터리를 설정한다. (String 타입)

inputMapping

Java 클래스를 생성하기 위하여 사용되는 입력 JAX-RPC 매핑 파일을 설정한다. (String 타입)

package

WSDL의 모든 Namespace URI에 대한 Java 패키지 이름을 설정한다.

(String 타입)

outputMapping

입력 WSDL에 대한 출력 JAX-RPC 매핑 파일을 설정한다. (String 타입)

doCompile

true일 때 생성된Java 소스 파일들은 컴파일된다. (기본값: true)

username

WSDL의 URL로 접근할 때 필요한 사용자 이름이다. (String 타입)

password

WSDL의 URL로 접근할 때 필요한 패스워드이다. (String 타입)

keepSrc

true로 설정하면 생성된Java 소스 파일들은 삭제되지 않는다. (기본값: true)

nowrapped

true로 설정하면 WSDL에 대한 wrapped MODE 탐지를 사용할 수 없다.

(기본값: false)

dataHandlerOnly

true로 설정하면 MIME 타입에 대하여 javax.activation.DataHandler를 적용한다.

(기본값: false)

nodatabinding

모든 WSDL massage part에 대하여 javax.xml.soap.SOAPElement를 적용한다.

(기본값: false)

soapver

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

  • 11 : SOAP 1.1(기본값)

  • 12 : SOAP 1.2

resolveDir

원격의 WSDL 파일(스키마 포함)을 로컬 저장소에 저장할 때 값을 설정할 수 있다. (String 타입)

DDGen

JEUS의 기본적인 배치 서술자(webservices.xml 파일과 MODE가 web인 경우 web.xml, ejb인 경우 ejb-jar.xml 파일)를 생성할 때 사용한다. (String 타입)

level

로그 레벨을 설정한다. (String 타입)

verbose

Verbose 출력은 true일 때 가능하다. (기본값: false)

Nested Element

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

figure webservice anttasks wsdl2java
wsdl2java Task 구성
<mapping>

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

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

속성 설명

package

Java 패키지의 이름이다. (필수 입력항목, String 타입)

namespace

WSDL의 Namespace URI이다. (필수 입력항목, String 타입)

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

예제

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

  • build.xml 작성 예제

    wsdl2java Ant Task build 파일 예제 : <build.xml>
    <?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>
  • 실행 예제

    $ jant
    Buildfile: build.xml
    ...
    [wsdl2java] Compiling generated sources(1)...
    ...
    BUILD SUCCESSFUL
    Total time: 6 seconds

1.3. wsgen

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

  • Portable Artifacts

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

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

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

속성 설명

sei

service endpoint interface 클래스 이름을 설정한다. (필수 입력항목, String 타입)

destdir

생성된 클래스 파일이 놓일 디렉터리의 절대 경로를 설정한다.

(필수 입력항목, String 타입)

classpath

입력으로 들어오는 클래스 파일들을 찾을 위치를 설정한다. (String 타입)

cp

classpath 속성과 같다. (String 타입)

resourcedestdir

genwsdl 속성과 함께 사용한다. WSDL 파일을 생성할 위치를 설정한다.

(String 타입)

sourcedestdir

생성되는 소스 파일들의 위치를 설정한다. (String 타입)

keep

생성되는 파일들을 보존 여부를 설정한다. (기본값: false)

verbose

Verbose 메시지를 출력 여부를 설정한다. (기본값: false)

genwsdl

WSDL 파일이 생성 여부를 설정한다. (기본값: false)

protocol

genwsdl 속성과 함께 사용한다.

wsdl:binding Element에 사용될 프로토콜을 설정한다.

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

servicename

genwsdl 속성과 함께 사용한다. 생성되는 WSDL 파일의 특정 wsdl:service Element의 이름을 설정할 때 사용한다. (String 타입)

portname

genwsdl 속성과 함께 사용한다. 생성되는 WSDL 파일의 특정 wsdl:portname Element의 이름을 설정할 때 사용된다. (String 타입)

extension

벤더 특정의 확장성을 설정할 때 사용한다. 상호 운용 및 이식성이 떨어질 수 있다. (Boolean 타입)

policy

웹 서비스 정책 설정 파일을 읽어 들인다. (String 타입)

예제

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

  • build.xml 작성 예제

    wsgen Ant Task build 파일 예제 : <build.xml>
    <?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>
  • 실행 예제

    $ jant
    Buildfile: build.xml
    ...
    
         [echo] Compiling wsgen...
    ...
    
    BUILD SUCCESSFUL
    Total time: 6 seconds

1.4. wsimport

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

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

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

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

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

속성 설명

wsdl

Java 소스 파일을 생성하기 위해서 사용되는 WSDL의 URL이나 절대 경로를 설정한다. (필수 입력항목, String 타입)

destDir

생성된 Java 파일이 놓일 디렉터리의 절대 경로를 설정한다. (String 타입)

sourcedestdir

생성된 소스 파일들이 놓일 위치를 설정한다. 이 속성을 지정하면 keep 속성이 자동으로 설정된다. (String 타입)

keep

생성되는 파일들을 보존 여부를 설정한다. (기본값: false)

verbose

Verbose 출력은 true일때 가능하다. (기본값: false)

binding

외부의 JAX-WS 또는 JAXB 바인딩 파일들을 설정한다. (String 타입)

extension

벤더 특정의 확장성을 설정할 때 사용한다. 상호 운용 및 이식성이 떨어질 수 있다. (Boolean 타입)

wsdllocation

WSDL URI를 이 속성에 명시하면 그 URI 값이 생성되는 SEI와 서비스 인터페이스의 @WebService.wsdlLocation Annotation과 @WebServiceClient.wsdlLocation Annotation에 설정된다. (String 타입)

catalog

TR9401, XCatalog, OASIS XML Catalog 형식과 같은 외부의 Entity 참조값을 설정할 수 있다. 또한 Ant xmlcatalog 타입을 사용할 수 있다. (String 타입)

package

WSDL의 모든 Namespace URI에 대한 Java 패키지 이름을 설정한다.

(String 타입)

target

이곳에 지정된 JAXWS 스펙 버전에 따라 코드를 생성한다. (String 타입)

quiet

출력 메시지들을 출력 여부를 설정한다. (기본값: false)

policy

웹 서비스 정책 설정 파일을 읽어 들인다. (String 타입)

예제

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

  • build.xml 작성 예제

    wsimport Ant Task build 파일 예제 : <build.xml>
    <?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>
  • 실행 예제

    $ 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

1.5. xjc

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

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

속성 설명

wsdl

컴파일하려는 스키마 파일이다. (필수 입력항목, String 타입)

binding

스키마 파일에 적용될 외부 추가 바인딩 파일이다. (String 타입)

package

이 옵션을 명시하면 생성되는 코드는 이 Java 패키지 하위에 위치한다. 이 옵션은 Command Line의 -p 옵션과 동일한 효과를 갖는다. (String 타입)

destdir

생성된 코드는 이 디렉터리 하위에 생성된다. (필수 입력항목, String 타입)

readonly

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

extension

true일 경우에 XJC 바인딩 컴파일러는 확장 모드로 실행된다. (기본값: false)

catalog

TR9401, XCatalog, OASIS XML Catalog 포맷과 같은 외부 카탈로그 파일을 설정할 때 사용한다. (String 타입)

removeOldOutput

"yes" 값으로 설정되면 produces Element가 가리키는 파일들은 XJC 바인딩 컴파일러가 소스 파일들을 재컴파일하기 전에 모두 삭제된다. (String 타입, "yes"|"no")

source

사용할 스키마 컴파일러의 버전을 명시한다. (String 타입, 1.0|2.0)

예제

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

  • build.xml 작성 예제

    xjc Ant Task build 파일 예제 : <build.xml>
    <?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>
  • 실행 예제

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

1.6. schemagen

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

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

속성 설명

destdir

생성되는 스키마 파일을 위치시킬 디렉터리를 설정한다. (String 타입)

classpath

클래스 패스를 설정한다. (String 타입)

예제

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

  • build.xml 작성 예제

    schemagen Ant Task build 파일 예제 : <build.xml>
    <?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>
  • 실행 예제

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