2010년 4월 3일 토요일

cxf-codegen-plugin (maven)

cxf에는 일반적인 웹서비스 프레임웍이 제공하듯이 wsdl to java 툴을 제공한다.
이번에 살펴볼 내용은 maven plugin으로 구현된 cxf-codegen-plugin을 살펴볼 것이다.


Resources:
http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html

자바 소스코드 생성



<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf-version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/hello_world.wsdl</wsdl>
</wsdlOption>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/demo/order.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>


wsdlOption 엘리먼트안의 wsdl 엘리먼트에 wsdl 파일을 지정해주면 1개 이상의 wsdl 파일을 이용하여 sourceRoot 안에 지정된 위치에 타입 클래스들에 대한 java 파일을 생성하고 maven의 output 디렉터리인 target/classes에 생성된 소스 파일들을 컴파일한다.

여러 개의 wsdl 파일 처리하기


그런데 wsdl이 추가 될 때마다 wsdlOption/wsdl 을 지정하는 것이 여간 번거로운 일이 아니다.
아래와 같이 지정하면 여러개의 wsdl 파일을 가지고 java source 코드를 생성할 수 있다.


<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf-version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
<includes>
<include>**/*.wsdl</include>
</includes>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>

wsdlRoot를 지정한 후에 includes/include에 위와 같이 지정하면 wsdlRoot 폴더 안에 포함되어 있는 모든 wsdl파일을 대상으로 타입 클래스를 생성한다.

이클립스를 사용하여 타입 클래스를 참조해야 한다면 소스 폴더를 target/generated/src/main/java로 지정해 두고 사용하면 편리하다.

클라이언트 소스 코드 생성


wsld2java 명령을 실행할 때 사용할 수 있는 여러개의 옵션들이 있다. 옵션 목록은 http://cxf.apache.org/docs/wsdl-to-java.html 에서 확인할 수 있따.
이러한 옵션들을 cxf-codegen-plugin에서도 사용할 있다.
예를들면 -client라는 옵션을 사용하면 웹서비스 클라이언트 코드를 생성해준다(실제 로직은 작성되어야 한다). -client 옵션을 사용하고자 하면 extraargs/extraarg를 이용하면 된다. extraargs 엘리먼트는 각 wsdlOption의 하위 노드에 설정되어 특정 wsdl 파일에만 적용할 수도 있고 아래와 같이 defaultOption을 이용하면 모든 wsdl에 적용할 수도 있다.

<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf-version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
<defaultOptions>
<extraargs>
<extraarg>-client</extraarg>
</extraargs>
</defaultOptions>
<includes>
<include>**/*.wsdl</include>
</includes>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>

댓글 없음:

댓글 쓰기