2010년 1월 27일 수요일

CXF + JDK1.6 + Spring 개발 하기 Part1 (CXF에서 Maven 설정)

최근에 프로젝트에서 웹 서비스를 하기 위해서 CXF를 사용 했습니다.
AXIS2를 사용 하려고 하다가 개발 편의성 과 스프링 Intergration이
너무 좋아서 선택을 했습니다.
CXF의 장점은 구글에서 검색하면 될 것 같구여.
제가 이번에 하면서 CXF 웹 서비스 환경 구축을 할때 삽질한 스토리를
말씀 드리고자 합니다.

오늘 내용은 제가 CXF 설정 하면서 제일 삽질 했던
Maven 설정입니다.

기본적으로 CXF를 설치 하려면 아래와 같은 라이브러리들이 필요 합니다.
(참고:http://cwiki.apache.org/CXF20DOC/writing-a-service-with-spring.html)

  • J2EE 라이브러리
commons-logging-1.1.jar
geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
jaxb-api-2.0.jar
jaxb-impl-2.0.5.jar
jaxws-api-2.0.jar
neethi-2.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.1.jar
XmlSchema-1.2.jar
xml-resolver-1.2.jar

  • Spring 라이브러리
aopalliance-1.0.jar
spring-core-2.0.8.jar
spring-beans-2.0.8.jar
spring-context-2.0.8.jar
spring-web-2.0.8.jar

  • CXF 라이브러리
cxf-2.1.jar

여기까지는 좋습니다. 실제로 바이너리 버전 받아서 "lib" 디렉토리
안에 jar를 포함 하면 됩니다. 하지만 현재 제가 개발하는
사이트에선 maven을 사용 하기 때문에 pom.xml에 의존성
태그를 선언 해야 하는데 CXF 설정은 오케이 인데
문제는 J2EE 라이브러리 문제가 있었습니다.
Maven Repository에서 안땡겨오는 라이브러리도 존재하고
또는 땡겨와도 클래스가 존재하지 않은 라이브러리도 존재하고
결국 하나씩 하나씩 가내 수공업 하면서 진행을 해야 했습니다.
그래서 나온 dependencies는 아래와 같습니다.





<!-- cxf -->
<dependency>
<groupid>org.apache.cxf</groupid>
<artifactid>cxf-rt-frontend-jaxws</artifactid>
<version>2.1.8</version>
</dependency>
<dependency>
<groupid>org.apache.cxf</groupid>
<artifactid>cxf-rt-transports-http</artifactid>
<version>2.1.8</version>
</dependency>
<dependency>
<groupid>org.apache.cxf</groupid>
<artifactid>cxf-rt-transports-http-jetty</artifactid>
<version>2.1.8</version>
</dependency>

<!-- J2EE -->
<dependency>
<groupid>org.apache.geronimo.modules</groupid>
<artifactid>geronimo-activation</artifactid>
<version>2.0.2</version>
</dependency>

<dependency>
<groupid>org.apache.geronimo.specs</groupid>
<artifactid>geronimo-annotation_1.0_spec</artifactid>
<version>1.1.1</version>
</dependency>


<dependency>
<groupid>org.apache.geronimo.specs</groupid>
<artifactid>geronimo-jaxws_2.1_spec</artifactid>
<version>1.0</version>
</dependency>


<dependency>
<groupid>org.apache.geronimo.specs</groupid>
<artifactid>geronimo-jms_1.1_spec</artifactid>
<version>1.1.1</version>
</dependency>
<dependency>
<groupid>org.apache.geronimo.specs</groupid>
<artifactid>geronimo-stax-api_1.0_spec</artifactid>
<version>1.0</version>
</dependency>

<dependency>
<groupid>org.apache.geronimo.specs</groupid>
<artifactid>geronimo-ws-metadata_2.0_spec</artifactid>
<version>1.1.2</version>
</dependency>

<dependency>
<groupid>org.apache.neethi</groupid>
<artifactid>neethi</artifactid>
<version>2.0.4</version>
</dependency>



<dependency>
<groupid>javax.xml.soap</groupid>
<artifactid>saaj-api</artifactid>
<version>1.3</version>
</dependency>

<dependency>
<groupid>javax.xml.soap</groupid>
<artifactid>saaj-impl</artifactid>
<version>1.3</version>
</dependency>

<dependency>
<groupid>wsdl4j</groupid>
<artifactid>wsdl4j</artifactid>
<version>1.6.2</version>
</dependency>
<dependency>
<groupid>org.codehaus.woodstox</groupid>
<artifactid>wstx-asl</artifactid>
<version>3.2.9</version>
</dependency>
<dependency>
<groupid>xalan</groupid>
<artifactid>xalan</artifactid>
<version>2.7.1</version>
</dependency>
<dependency>
<groupid>org.apache.xmlbeans</groupid>
<artifactid>xmlbeans</artifactid>
<version>2.4.0</version>
</dependency>
<dependency>
<groupid>xml-resolver</groupid>
<artifactid>xml-resolver</artifactid>
<version>1.2</version>
</dependency>
<dependency>
<groupid>org.apache.ws.commons.schema</groupid>
<artifactid>XmlSchema</artifactid>
<version>1.4.5</version>
</dependency>
<dependency>
<groupid>org.apache.santuario</groupid>
<artifactid>xmlsec</artifactid>
<version>1.4.3</version>
</dependency>
<dependency>
<groupid>org.apache.servicemix.bundles</groupid>
<artifactid>org.ap

CXF 2.2.x 버전을 설치 하고 싶으면 버전만 수정 하시면 됩니다.
여기서 JAXB 라이브러리는 dependency 선언을 하지 않았습니다. 이유는 다음 Part2
에서 설명 하도록 하겠습니다.

댓글 없음:

댓글 쓰기