[SOAP] 웹서비스를 구축하여 보자!(apache cxf 사용?)

2014. 5. 28. 18:24OpenSource/Apache CXF

반응형

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를 만들어보자.





RndProvider.java


RndProviderImpl.java


context-webservice.xml



우선 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 -

반응형