Webservice 유용 정의
http://www.ehow.com/info_12212371_definition-service-endpoint.html
위의 용어중에 endpoint라는 것이 있다.
기본적으로 consumer - provider 이런 용어가 있는데
endpoint라는 친구는 provider에서 공개적으로 열어 놓는 것이다.
그래서 여기에서의 시나리오는 이러하다.
환경은 Spring + Maven 기반이고, 첫번째로 endpoint구성 후 soap UI라는 것을 통해 동작을 살펴보자.
두번째로는 아파치 cxf를 통해서 consumer에서 사용 할 stub code를 생성하자. 여기까지 해보겠다 ㅋㅋ 프록시를 만들어서 코드를 짜는 것은 우선 패스~~:D
자 시작해보자! ㅎㅎㅎ
1) web.xml 설정
아래와 같이 Servlet설정을 해보자.
<!-- cxf Webservice DispatcherServlce -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<!--CXF Webservice Dispatcher Servlet Mapping -->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
2) Spring 소스 설정
아래와 같이 RndProvider.java(인터페이스) 와 구현체인 RndProviderImpl.java를 만들고
context-webservice.xml을 생성하여 endpoint를 만들어보자.
우선 context-webservice.xml을 살펴보자.
<jaxws:endpoint id="rndProvider"
implementor="kr.pe.constr.webservice.RndProviderImpl"
address="/RndProvider" />
위의 부분이 endpoint의 설정부분이며 RndProviderImpl.java가 연결 되어져있다.
그런 다음 서버를 기동 하여 아래의 주소를 치면 WSDL의 주소가 나오게 된다.
클릭을 하게 되면 아래와 같이 wsdl이 생기게 된다. (http://localhost:9080/webservice/RndProvider?wsdl)
그런 다음 soap ui를 통해 테스트 해보자. 우선은 다운로드!! http://www.soapui.org/
RndProviderImpl.java에서의 소스 내용은 아래와 같다.
@Override
public int acet(UserVo userVo) {
// TODO Auto-generated method stub
System.out.println(userVo.getId()+"====="+userVo.getName());
if(userVo.getId().equals("acet")){
return 1000;
}
return 0;
}
그러므로 코딩에 의해서 0이 나오게 된다.
이제는 stub code를 apache cxf를 통해서 만들어보자.
우선 apache cxf를 셋팅하자.
다운로드 : http://www.apache.org/dyn/closer.cgi?path=/cxf/3.0.0/apache-cxf-3.0.0.tar.gz
pom.xml에도 디펜던시를 추가해줘야 한다.
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${cxf.version}</version> </dependency> |
참고 사이트 : http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/java_first_spring_support/
cxf의 bin아래로 가서 다음의 명령어를 실행한다.
wsdl2java -client -p kr.pe.constr.webservice.consumer.stub -impl -validate -exsh false -dns true -dex true -wsdlLocation http://localhost:9080/webservice/RndProvider?wsdl -encoding UTF-8 -verbose -defaultValues -fe jaxws -db jaxb -wv 1.1 RndProvider.wsdl
명령어로 나온 소스를 아래와 같이 스프링쪽으로 옮겨준다.(단, 이 소스는 consumer쪽 소스이다!!)
단, RndProviderImplService.java에서 아래의 오류나는 부분은 삭제를 한다.
프록시를 하나 만들어서 원하는 아파치 cxf를 통해 나온 stub 코드를 통해 consumer에서 provider에서 열어놓은 endpoint쪽을 접근해 실행 시킨다.
참고 사이트 : http://cxf.apache.org/docs/writing-a-service-with-spring.html
- END -
'OpenSource > Apache CXF' 카테고리의 다른 글
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions (0) | 2013.09.04 |
---|---|
Webservice 기초 (0) | 2013.02.25 |
Apache CXF??? (0) | 2012.11.16 |