옆에 나열한 개념들을 대충 구글링해서 찾아보면 수월하게 작업 할 수 있습니다. => SOA, 웹서비스, XML, wsdl
* was(톰캣, 웹로직, 제우스)에서 제공하는 웹서비스관련 jar들과 충돌 즉. 자신의 프로젝트 jar들끼지 의존이 되어야 하는데 was 쉐어드..가 부분적으로 로딩될 수 있다. 이럴때는 was 가이드별를 참고해서 자신의 프로젝트 구성으로만 우선 로딩할 수 있게 해야한다.
간단하게~~~ 서비스와 클라이언트를 CXF를 이용해서 만들어 본다.
(axis2, CXF, spring WS) 등이 있는데... 간단하게 구글링해보니 CXF가 가장 간단한거 같다. 각 was 에서 쌩짜로 짜면 힘듭니다. axis는 구성이 잘 되지 않네요.
자바 1.7, 1.8 별로 cxf 버전도 맞춰야 하니 한번쯤 CXF 아파치 사이트가서 버전별 도움말 읽어 보길 추천 합니다.
우선 초간단 웹서비스 먼저 구성
개발환경이 톰캣 7 (2개 사용) , 자바 6, Spring, 이클립스
1. CXF바이너리 파일 다운로드, 이클립스 설정
D:\apache-cxf-2.6.2\apache-cxf-2.6.2 바이너리 파일 다운받아 D:\ 에 설치. 따로 패스설정은 안했다.
시간이 좀 지났고 유행이 지나서 약간 예전 버전을 사용해서 웹서비스를 구현해본다.
https://archive.apache.org/
이클립스에서 run을 서치 server and Runtime 의 웹서비스를 CXF 2.x로 설정
웹서비스를 검색 cxf 2 Preferences 에서 CXF runtime 패스를 설정
cxf 2.6.2 바이너리 압축파일 푼 폴더를 잡아 준다.
2. 스프링 웹 프로젝트 설정
(pom.xml , web.xml, context, 서비스하고자 하는 java)
2-1. pom.xml cxf 메이븐 추가
<!-- cxf -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
2-2. context 추가 (빨간색부분이 자바 interface, class 구현)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<!-- REST -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" />
<!-- SOAP -->
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<context:component-scan base-package="com.spring.test" />
<jaxws:endpoint id="deptProcess"
implementor="com.spring.test.webservice.DeptProcessImpl" address="/DeptProcess" />
</beans>
2-3. 빨간색 부분을 참고
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/appServlet/context-cxf.xml
</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/webService/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
2-4. DeptVo, DeptProcess, DeptProceeImpl 부서정보를 리턴하는 웹서비스
2-4-1 . DeptVo.java
2-4-2 . DeptProcess.java
import java.util.List;
import javax.jws.WebService;
import com.spring.test.DeptVo;
@WebService
public interface DeptProcess {
List<DeptVo> processDept();
}
2-4-3. DeptProcessImpl.java
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import com.spring.test.DeptVo;
@WebService(endpointInterface = "com.spring.test.webservice.DeptProcess")
public class DeptProcessImpl implements DeptProcess {
@Override
public List<DeptVo> processDept() {
System.out.println("!!!!!!!!!!!!!! 웹서비스를 호출합니다. !!!!!!!!!!!!!!");
List<DeptVo> deptVos = new ArrayList<DeptVo>();
for(int i=0; i <20 ;i++) {
DeptVo deptVo = new DeptVo();
deptVo.setDeptName("부서명"+i);
deptVo.setDeptNo(i);
deptVo.setLocation("부서지역"+i);
deptVos.add(deptVo);
}
return deptVos;
}
}
3. 톰캣에 프로젝트를 배치 하고 실행 해본다.
http://localhost:8080/webService
http://localhost:8080/webService/DeptProcess?wsdl
wsdl이 만들어 졌다
web.xml에 설정한 cxf의 url패턴의 주소
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/webService/*</url-pattern>
</servlet-mapping>
wsdl 파일은 서두에 설명한 SOA, WEB SERVICE 키워드로 구글링 하면 많은 자료가 나옴.
간단한 건데...하루 종일 헤맸네요...
클라이언트 구현은 다음 글에~~~
테스트 소스 첨부함
'슬기로운 자바 개발자 생활 > 스프링 및 자바웹 서비스' 카테고리의 다른 글
이클립스 jee(2018-12) 스프링 레가시 프로젝트 생성 방법 (0) | 2019.01.15 |
---|---|
WSDL 클라이언트 구현 CXF2 자바웹서비스 데이터 받기 (0) | 2017.09.10 |
Swagger 적용하기(Spring Boot, Gradle) (0) | 2017.08.15 |
intellij 와 github 간단 연결 (0) | 2017.08.15 |
Spring Validatir(스프링 밸리데이터) (0) | 2016.11.27 |
댓글