1. 웹 서비스 Maven Plugin
본 절에서는 JEUS에서 JAX-WS 기반의 웹 서비스 생성과 웹 서비스 클라이언트를 위해 제공하는 Maven Plugin에 대해서 설명한다.
1.1. wsgen
wsgen Plugin은 service endpoint interface 클래스(그리고 임의의 Java로 구현한 클래스)로부터 다음을 생성한다.
-
Portable Artifacts
-
웹 서비스의 WSDL파일(옵션)
wsgen plugin은 JEUS_HOME/lib/client/jeus-ws-maven-plugin.jar으로 제공된다.
wsgen plugin을 사용하기 위해서는 다음 작업이 선행되어야 한다.
-
jeus-ws-maven-plugin.jar 파일을 로컬 Repository에 install한다.
-
JDK 7 환경에서는 Maven option에 다음을 추가한다.
-Djava.endorsed.dirs=JEUS_HOME/lib/endorsed
다음은 wsgen plugin 속성에 대한 설명이다.
속성 | 설명 |
---|---|
sei |
SEI 클래스의 이름을 설정한다. (필수 입력항목, String 타입) |
destDir |
생성된 클래스 파일이 놓일 디렉터리의 절대 경로를 설정한다. (기본값: ${project.build.outputDirectory}) |
resourceDestDir |
genwsdl 속성과 함께 사용한다. WSDL 파일을 생성할 위치를 설정한다. (기본값: ${project.build.directory}/generated-sources/wsdl) |
sourceDestDir |
생성되는 소스 파일들의 위치를 설정한다. (기본값: ${project.build.directory}/generated-sources/wsgen) |
keep |
생성되는 파일들을 보존 여부를 설정한다. (기본값: true) |
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 |
벤더 특정의 확장성을 설정할 때 사용한다. 상호 운용 및 이식성이 떨어질 수 있다. (기본값: false) |
예제
pom.xml을 작성한 예제와 이 pom.xml을 통해 wsgen plugin을 실행하는 예제에 대한 설명이다.
-
pom.xml 작성 예제
wsgen plugin pom 파일 예제 : <pom.xml><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jeus.webservices.maven.sample</groupId> <artifactId>wsgen_sample</artifactId> <version>0.0.1</version> <packaging>war</packaging> <name>${project.artifactId}</name> <build> <plugins> <plugin> <groupId>jeus.ws</groupId> <artifactId>jeus-ws-maven-plugin</artifactId> <version>0.0.1</version> <executions> <execution> <id>wsgen_test</id> <goals> <goal>wsgen</goal> </goals> <configuration> <sei>jeus.webservices.sample.EchoService</sei> <extension>true</extension> <genWsdl>true</genWsdl> <keep>true</keep> <inlineSchemas>true</inlineSchemas> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6</version> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-tools</artifactId> <version>2.2</version> <scope>system</scope> <systemPath>${jeus.home}/lib/system/jaxws-tools.jar</systemPath> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> <compilerArguments> <endorseddirs>${jeus.home}/lib/endorsed</endorseddirs> </compilerArguments> </configuration> </plugin> </plugins> </build> </project>
-
실행 예제
$ mvn -Djeus.home=${JEUS_HOME} process-classes [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building wsgen_sample 0.0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ wsgen_sample --- [INFO] skip non existing resourceDirectory /jeus/wsgen/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ wsgen_sample --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- jeus-ws-maven-plugin:0.0.1:wsgen (wsgen_test) @ wsgen_sample --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.773s [INFO] ------------------------------------------------------------------------
1.2. wsimport
wsimport Plugin은 웹 서비스의 WSDL로부터 다음의 2개 중에 하나를 생성한다.
-
클라이언트 측 웹 서비스의 Stub Java 소스 코드들
-
서버 측 웹 서비스의 인터페이스 Java 소스 코드들
wsimport plugin은 JEUS_HOME/lib/client/jeus-ws-maven-plugin.jar으로 제공된다. wsimport plugin을 사용하기 위해서는 다음 작업이 선행되어야 한다.
-
jeus-ws-maven-plugin.jar 파일을 로컬 Repository에 install한다.
-
JDK 7 환경에서는 mavan option에 다음을 추가한다.
-Djava.endorsed.dirs=JEUS_HOME/lib/endorsed
다음은 wsimport plugin 속성에 대한 설명이다.
속성 | 설명 |
---|---|
wsdlDirectory |
Java 소스 파일을 생성하기 위해서 사용되는 WSDL 파일들을 포함한 디렉터리 경로를 설정한다. (기본값: ${basedir}/src/wsdl) |
wsdlFiles |
Local WSDL 파일 리스트를 설정한다. (String 타입) |
wsdlUrls |
External WSDL URL 리스트를 설정한다. (String 타입) |
destDir |
생성된 Java 파일이 놓일 디렉터리 경로를 설정한다. (기본값: ${project.build.outputDirectory}) |
sourceDestDir |
생성된 소스 파일들이 놓일 위치를 설정한다. 이 속성을 지정하면 keep 속성이 자동으로 설정된다. (기본값: ${project.build.directory}/generated-sources/wsimport) |
keep |
생성되는 파일들을 보존 여부를 설정한다. (기본값: true) |
verbose |
Verbose 출력은 true일 때 가능하다. (기본값: false) |
bindingDirectory |
JAX-WS 또는 JAXB 바인딩 파일들을 포함한 디렉터리 경로를 설정한다. (기본값: ${basedir}/src/jaxws) |
bindingFiles |
JAX-WS 또는 JAXB 바인딩 파일 리스트를 설정한다. (String 타입) |
extension |
벤더 특정의 확장성을 설정할 때 사용한다. 상호 운용 및 이식성이 떨어질 수 있다. (기본값: false) |
wsdlLocation |
WSDL URI를 이 속성에 명시하면 그 URI 값이 생성되는 service end-point interface와 서비스 인터페이스의 @WebService.wsdlLocation Annotation과 @WebServiceClient.wsdlLocation Annotation에 설정된다. |
catalog |
TR9401, XCatalog, OASIS XML Catalog 형식과 같은 외부의 Entity 참조값을 설정할 수 있다. 또한 Ant xmlcatalog 타입을 사용할 수 있다. |
packageName |
WSDL의 모든 Namespace URI에 대한 Java 패키지 이름을 설정한다. (String 타입) |
target |
이곳에 지정된 JAXWS 스펙 버전에 따라 코드를 생성한다. (String 타입) |
quiet |
출력 메시지들을 출력 여부를 설정한다. (기본값: false) |
예제
다음은 pom.xml을 작성한 예제와 pom.xml을 통해 wsimport plugin을 실행하는 예제에 대한 설명이다.
-
pom.xml 작성 예제
wsimport plugin pom 파일 예제 : <pom.xml><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jeus.webservices.maven.sample</groupId> <artifactId>wsimport_sample</artifactId> <version>0.0.1</version> <packaging>war</packaging> <name>${project.artifactId}</name> <build> <plugins> <plugin> <groupId>jeus.ws</groupId> <artifactId>jeus-ws-maven-plugin</artifactId> <version>0.0.1</version> <executions> <execution> <id>wsimport_test</id> <goals> <goal>wsimport</goal> </goals> <configuration> <packageName>jeus.webservices.sample.test</packageName> <wsdlDirectory>${basedir}/src/wsdl</wsdlDirectory> <wsdlFiles> <wsdlFile>EchoService.wsdl</wsdlFile> </wsdlFiles> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6</version> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-tools</artifactId> <version>2.2</version> <scope>system</scope> <systemPath>${jeus.home}/lib/system/jaxws-tools.jar</systemPath> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> <compilerArguments> <endorseddirs>${jeus.home}/lib/endorsed</endorseddirs> </compilerArguments> </configuration> </plugin> </plugins> </build> </project>
-
실행 예제
$ mvn -Djeus.home=${JEUS_HOME} generate-sources [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building wsimport_sample 0.0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- jeus-ws-maven-plugin:0.0.1:wsimport (wsimport_test) @ wsimport_sample --- [INFO] Processing: file:/jeus/wsimport/src/wsdl/EchoService.wsdl [INFO] jaxws:wsimport args: [-keep, -s, /jeus/wsimport/target/generated-sources/wsimport, -Xnocompile, -p, jeus.webservices.sample.test, file:/jues/wsimport/src/wsdl/EchoService.wsdl] parsing WSDL... Generating code... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.052s [INFO] ------------------------------------------------------------------------