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을 사용하기 위해서는 다음 작업이 선행되어야 한다.

  1. jeus-ws-maven-plugin.jar 파일을 로컬 Repository에 install한다.

  2. 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을 사용하기 위해서는 다음 작업이 선행되어야 한다.

  1. jeus-ws-maven-plugin.jar 파일을 로컬 Repository에 install한다.

  2. 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] ------------------------------------------------------------------------