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 타입) 다음 중에 하나를 설정한다.
|
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 버전을 설정한다.
|
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를 가질 수 있음을 의미한다).
<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