정보공간_1

[6기 강남 윤재석] SOAP Implementation in Java 본문

IT 놀이터/Elite Member Tech & Talk

[6기 강남 윤재석] SOAP Implementation in Java

알 수 없는 사용자 2014. 10. 30. 16:47
안녕하세요. 삼성소프트웨어 멤버십 엘리트멤버 6기 윤재석 입니다. 이번시간에는 SOAP (Simple Object Access Protocol)을 구현하는 방법에 대해 이야기하고자 합니다.

SOAP 구현에 앞서서 SOAP과 관련한 이론적인 내용에 대해 간단히 알아보겠습니다.

1) SOAP ( Simple Object Access Protocol)
XML을 기반으로 분산 환경에서 사용할 수 있는 프로토콜. HTTP를 이용하여 원격 프로시저 호출을 지원하기 위해 만들어진 프로토콜이며 XML기술을 사용
- 분산 환경에서 어플리케이션 간에 정보를 교환하기 위한 XML 기반의 메시지 프로토콜

1-1) SOAP의 특징
    - 인터넷을 통하여 통신하는 프로토콜이다.
    - 플랫폼, 언어에 독립적이다.
    - XML 에 기반을 두고 있다.
    - 단순하고 확장성이 있다.
    - W3C 권고

1-2) SOAP에 대한 더 자세한 사항은 아래 포스트를 참고

[6기 강남 윤재석] SOAP & REST (http://blog.secmem.org/525)


2) UDDI ( Universal Description, Discovery and Integration)
일종의 저장소로, 제공하는 웹서비스가 무엇인지를 기술, 등록, 검색할 수 있는 곳

3) WSDL (Web Services Description Language)
특정 비즈니스가 제공하는 서비스를 설명하고 개인이나 다른 회사들이 서비스에 접근하는데 사용할 수 있는 XML 기반의 표준언어.
-> 마이크로소프트, 아리바 등에 의해 주도된 UDDI 기본이라고도 할 수 있음.

4) AXIS
SOAP 프로젝트의 차세대 형태로서 자바에 기반을 두고 있는 SOAP의 오픈 소스 구현.
(Apache SOAP 제품의 한계점을 극복하기 위해 나온 것이 AXIS)

4-1) AXIS의 특징
    - SOAP 버전 1.1 과 XML 프로토콜(SOAP 버전 1.2)의 완벽한 지원
    - 융통성 있는 메시지 프레임 워크
    - 융통성 있는 설치 시스템
    - 융통성 있는 전송 프레임워크
    - 빠른 속도
    - 데이터 인코딩 지원
    - 완벽한 WSDL 지원
    - 빌트-인 프로바이더(RPC와 메시지-지향 트랜잭션을 둘 다 다룸) 제공
    - 개선된 로깅
    - HTTP 서버의 자립형 버전
    - 보안 지원
    - 에러 및 폴트 처리

5) Apache CXF
웹서비스를 구현하기 위한 오픈 소스 프레임워크(SOAP 엔진이라고 생각하면 됨)는 Apache CXF, Apache Axis2, Metro, Spring Web Services등 다양한 프로젝트가 존재함. 그 중 CXF와 Axis2가 가장 많이 사용되고 있다. 성능, 유연성, 용이성 측면에서 CXF가 많이 쓰임.

5-1) Apache CXF의 특징
    - SOAP, REST/HTTP, XML/HTTP, CORBA등의 다양한 프로토콜 바인딩을 지원
    - JSR(Java Specification Requests) 에 규격화된 JAX-WS(Java API for XML Web Services), JAX-RS(Java API for RESTful Web services)와 같은 프로그래밍API를 사용하여 서비스를 지원
    - 다양한 데이터 바인딩 프레임워크와 연동이 가능함 (JAXB 2.x , Aegis, JIBX 등)
    - WSDL 생성을 지원 (Java to WSDL, XSD to WSDL 등)
    - POJO(Plain Old Java Object)를 이용한 웹 서비스 구축이 가능함
    - WS-Security, WS-Addressing 등 WS-*관련 기술을 지원
    - High Performance(고성능). Extensible(확장 가능한), Easy to Use(손쉬운 사용)을 지향함



이제 본격적으로 AXIS로 시작해서 SOAP WebService 를 구현해보도록 하겠습니다.


1. 이클립스 설치 및 환경설정
    - workspace:  C:\workspace\soap

2. Apache Tomcat 설치 및 환경설정
Tomcat Version 4.1.x 이상이고, Full 버전을 설치해야 한다.

3. Axis2 설치 및 설정
    - Axis2 사이트에서 다운로드: http://axis.apache.org/axis2/java/core/download.cgi
    - 환경변수 설졍 : AXIS_HOME으로 지정
    - 이클립스에서 설정
       : Window => Preferences => Web Services => Axis2 Preferences 클릭
         Axis2 Runtime Location : Axis2설치 디렉토리 
    - SOAP은 XML 메세지이므로 XML 파서를 기본으로 사용하는데 Xerces를 권장한다.
      톰캣에는 Xerces 파서가 라이브러리에 포함되어 있어서 톰캣 4.1.x 이상의 버전이면 되고 클라이언트 쪽에서는 CLASSPATH에 Xerces의 jar를 등록하는 것으로 환경 준비를 마친다.

4. CXF 설치 및 설정
    - Apache CFX 사이트에서 다운로드 : http://cxf.apache.org/download.html
    - 환경변수 설정 : CXF_HOME으로 지정
    - 이클립스에서 설정
    : Window => Preferences => Web Services => CXF2.x 에서 경로 설정
    : Window => Preferences => Web Services => Server and Runtime 에서 Web Service Runtime : Apache CXF 2.x로 설정

5. SOAP WebService 만들기 ( SOAP Server )

 5-1. 프로젝트 생성

project name : jaxwswithcxf

Dynamic web module version : 3.0

Configuration : Default Configuration for Apache Tomcat v7.0


 5-2. 프로젝트에 Java 클래스 생성

    - "HelloServiceImpl" 라는 자바 클래스를 생성하고 이것을 CXF Eclipse wizard를 사용하여 WebService로 등록할 것입니다. 

      1) HelloServiceImpl 에 JAX-WS annotation을 추가합니다.

      2) WebServices가 선언되어 있는 Spring beans.xml 파일을 서비스를 publish 하기위해 생성합니다.

      3) beans.xml 안에 선언되어있는 적당한 웹서비스를 가져오기 위해 사용되는 Spring CXF Servlet을 선언하기 위해 web.xml을 수정합니다.



 5-3. 웹 서비스 만들기

    - "HelloServiceImpl" 오른쪽 버튼 -> Web Service-> Create Web Service


    - Axis, Axis2, CXF, etc를 사용하여 웹서비스를 생산하는 Web Service Wizard 창


Install Service 라는 곳이 원래 Start Service 라고 설정되어있는데, 이것은 이 마법사 창이 꺼지면 서버가 바로 실행되는 것을 의미한다. 수동적으로 server를 launch시키기 위해서는 Install Service로 설정해야한다. 또한 Configuration 항목에서 Web Service runtime이 axis로 되어있다면 CXF로 바꿔야합니다.


- Starting Point configuration 마법사

이 마법사는 JAX-WS annotation 이 되어있는 interface를 만들기 위한 것입니다. 결과로 "HelloServiceImpl"는 JAX-WS annotation을 포함하도록 생성됩니다.

 - Web Service JAX-WS Annotations Configuration 마법사

 - Web Service JAVA2WS Configuration 마법사 창

1) Generate client : JAX-WS Service.crate()로 간단한 client를 생성합니다.

2) Generate server : 웹서비스의 간단한 서버를 생성합니다. 이것은 Jetty 에 임베디드 되어있는 서버를 시작시키고 JAX-WS Endpoint#publish를 사용하여 웹서비스를 등록합니다.

3) Generate Wrapper and Fault Beans : JAXB annotation을 포함하고 있는 JAVA class를 생성합니다. 이 클래스는 *.jaxws package( 현재 샘플에서는 org.sample.ws.jaxws) 패키지 안에 생성됩니다. 

4) Generate WSDL : 웹서비스의 WSDL을 생성합니다. 

- WSDL 파일 : 생성시킬 WSDL 파일의 이름 - Default SOAP binding  - Generate separate XSD for the types: 만약에 이 옵션이 선택되어 있으면 생성된 WSDL파일은 함수 파라미터 안에서 사용되는 구조체의 타입을 성명하는 XML 스키마를 포함하지 않습니다.


- SOAP WebSerivce 생성 결과




6. SOAP Client 만들기

SOAP WebService의 결과를 표현해주는 간단한 SOAP Client를 제작해보겠습니다.

 6-1. 프로젝트 생성

project name : jaxwswithcxfConsuming 

Dynamic web module version : 3.0

Configuration : Default Configuration for Apache Tomcat v7.0

 6-2. wsdl 파일 복사

WEB-INF 밑에 wsdl 폴더를 생성하고 SOAP WebService 구현에서 자동으로 생성된 helloserviceimpl.wsdl 파일을 복사합니다.

 6-3. SOAP Client 생성

 helloserviceimpl.wsdl  오른쪽 버튼 -> web services -> generate client 

- SOAP Client 생성 결과


 6-4. SOAP Client 를 Web 형태로 제공하기

 SOAP Client의 결과를 Web 형태로 제공하기 위해 java 파일과 jsp 파일을 생성합니다. org.sample.ws.consum 패키지를 만들고 Hello.java를 생성합니다.


 이어서 WebContent 폴더 아래에 request.jsp 파일을 만듭니다.

 Client를 실행하면 아래와 같은 결과를 볼 수 있습니다.

수고하셨습니다. 감사합니다.



Written By Jaeseok Yoon, email : yjaeseok@gmail.com