※ 신청하신 상품이 많은 경우 정보 제공에 시간이 걸릴 수 있습니다.

처리 시간: 0초

API 상태 API 통합설명서(명세서)
  • 로그인
  • 회원가입
  • 사이트맵
  • ENG

[개발가이드]SOAP API - JAVA 개발 메뉴얼

개발가이드
작성자 관리자 조회수 29442 작성일시 2016-11-11
JAVA (for Eclipse)

· Web Application Server : Tomcat,       · Development Tool : Eclipse 3.1 or later

* Eclipse 3.1의 WSDL to Java를 이용하여 개발하는 과정입니다.

새로운 프로젝트를 만들기 위해, ProjectExplorer 에서 마우스 오른쪽 버튼을 눌러 new->other를 클릭합니다.
(우리가 만들 프로젝트는 Dynamic Web Project 이기 때문에 other 대신에 바로 Dynamic Web Project를 선택해도 됩니다.)

설명에 해당하는 eclipse 캡쳐 화면

Select Wizard 에서 Web 폴더 아래 Dynamic Web Project를 선택하고 Next를 누릅니다.

이클립스 dyamic web project를 선택한 화면

Dynamic Web Project 창에서 Project Name 에 생성할 프로젝트의 이름을 적습니다.
예제에서는 ‘RMIWebSeviceClient’라는 이름으로 프로젝트를 생성합니다.
Project contents는 프로젝트가 저장될 위치를 말합니다. 예제에서는 Default로 진행합니다.
다음은 웹 어플리케이션을 실행할 타겟 서버를 선택합니다. 선택하기 위해 Target Runtime 창에서 new 버튼을 누릅니다.
(기존에 설정이 되어 있다면 이 부분은 무시하고 넘어갑니다.)

RMIWebServiceClient 이름으로 프로젝트를 생성한 화면

Server Runtime Environment 를 위해 자신이 설치하고 사용할 웹 서버를 선택한 후 next를 누릅니다.

이클립스에서 웹서버를 선택한 화면
웹서버를 선택한 후 next를 누른 후 화면
웹 서버가 설치된 경로를 지정해 주기 위해 Browse 버튼을 눌러 그림과 같이 해당하는 경로를 지정해주거나 Download and Install 버튼을 통해 새롭게 설치할 수도 있습니다.(이 부분은 생략)
해당경로를 지정해 주면 자신이 사용하고 있는 JRE(JRE는 컴퓨터에서 자바 혹은 JVM 기반 프로그램들이 실행 될 수 있도록 환경을 구성 )를 설정해 줍니다.
기본적으로 Eclipse Workbench에서 설정한 default 값이 있다면 그대로 진행을 하고, 새롭게 자바를 설치했거나 자바 버전이 바뀌었다면 Installed JRE 버튼을 눌러 해당하는 JRE환경 설정으로 변경할 수 있습니다.(이 부분에 대한 자세한 내용 생략)
예제에서는 default 값으로 진행하고, Finish 버튼을 누릅니다.

기본으로 선택한 화면

이렇게 Target Runtime 설정이 완료 되면 Configuration 설정 값 역시 방금 설정한 타겟 서버 네임으로 Default 설정이 되는 것을 확인 할 수 있습니다.
별도의 환경설정이 더 필요한 경우 Configuration Modify 버튼을 눌러 설정할 수 있습니다.(이하 생략)
Dynamic Web Module은 해당 동적 모듈 버전을 설정하는 부분입니다.
기본적으로 Eclipse가 자신이 가진 모듈의 버전을 Default로 잡기 때문에 그대로 진행합니다.
Next 를 눌러 ContextRoot와 Content 및 자바소스 폴더를 확인하고 Finish 를 눌러서 프로젝트 생성을 완료합니다.

Dynamic Web Project 생성 화면

그림과 같이 RMIWebServiceClient라는 이름으로 웹프로젝트가 생성되었음을 확인할 수 있습니다.
+ 플러스 버튼을 눌러 프로젝트를 확장시켜 프로젝트 내 파일들을 확인할 수 있습니다.

이클립스에서 RMIWebServiceClient 프로젝트가 생성된 화면

지금부터는 생성된 웹 프로젝트에 Eclipse 플랫폼에서 제공하는 RPC, Java RMI 방식의 웹 서비스 소스를 추가하기 위해, Web Service Wizard를 실행하겠습니다.
우선, 프로젝트 명을 클릭하고 마우스 오른쪽 버튼을 눌러 other를 누릅니다.

RMIWebServiceClient 프로젝트 선택후 new 선택후 other를 선택한 화면

그림처럼 Select a wizard 화면에서 Web Services 폴더에 Web Service Client를 선택하고 Next를 눌러 진행합니다.

select a wizard창에서 Web Service Client를 선택한 화면

Web Service Client 를 구축하기 위해서는 다음과 같은 설정들이 필요합니다. Service Definition 입력 창에는 웹 서비스와 연결하기 위해 자신이 이용하고자 하는 웹 서비스 주소(WSDL)를 기입하거나 WSDL 파일이 있는 경우 Browse 버튼을 눌러 해당 WSDL 파일을 찾아 지정해 줄 수 있습니다.
Client type 은 Java Proxy 역할을 하는 Client를 만들겠다는 의미의 Java Proxy가 default 값으로 잡혀 있고 왼쪽 하단에는 코드 생성 단계를 결정하는 부분, 오른 쪽 하단 Configuration에는 Web Service Client 프로그램이 사용할 웹 서버와 웹 서비스 의 런타임 환경을 설정하는 부분이 있습니다.
그리고 제일 마지막 하단에는 추후에 Web Service SOAP traffic을 살펴 볼 수 있는 모니터를 추가할 것인지의 여부를 묻는 체크박스가 있습니다.

Web services 창 화면

예제에서는 Service Definition 입력 창에 현재 특허청에서 제공하는 서지 정보 서비스인 http://plus.kipris.or.kr/kiprisplusws/services/PatentBibliographicInfoService?wsdl 주소를 입력합니다.
그리고 Client type 은 Java Proxy로 고정되어 있는 값을 그대로 사용하고, 왼쪽 하단 코드 생성 단계는 Develop client, Assemble client, Deploy client, Install client, Start client, Test client 단계로 나누어지는데 여기서는 Assemble client로 진행합니다.
그리고 Configuration에서 Server와 Web service runtime을 선택하면 그림과 같이 런타임 환경을 설정할 수 있는 창이 나타나는데 예제에서는 Apache Axis 와 Tomcat v6.0 Server를 선택하고 OK를 눌러 창을 닫습니다.
그리고 나중에 SOAPMonitor를 이용하기 위해 Monitor the web Service 를 체크하고 Next -> Finish를 눌러 완료합니다.

Client Environment Configuration 창 화면

그림과 같이 프로젝트의 src 폴더 밑에 3개의 패키지가 생성되고 그 안에 Class 파일들이 자동으로 생성 되어 졌음을 확인할 수 있습니다. 또한 lib 폴더 안에 관련 라이브러리 파일들이 생성되어 졌음을 확인할 수 있습니다.

프로젝트의 src아래에 자동으로 패키지 및 class가 생성된 화면

여기 부터는 코딩 입력 페이지 입니다. 소스 내용은 첨부파일에 있습니다.
이제 웹 서비스를 위해 새롭게 생성된 Class 와 라이브러리 들을 가지고 클라이언트 웹서비스를 만들어 보겠습니다.
먼저, 이해를 돕기 위해 JSP 페이지로 값을 출력하기 전에 Java Application으로 테스트를 해 보겠습니다.
그림처럼 Main() 메서드를 포함하는 Class 파일을 새롭게 생성합니다.

class파일을 생성한 화면

먼저, Client 에서 웹서비스를 처리하는 전체적인 흐름을 보겠습니다.
그림에서 보는 바와 같이 웹 서비스를 제공하는 웹 서버가 있습니다.
서비스를 제공하는 측에서는 자신들이 제공하는 하나의 서비스는 코드 상으로 보면 하나의 메서드로 볼 수 있습니다.
이 메서드를 통해 값이 출력되게 됩니다.
우리는 원격에 있는 웹 서버에 접속해서 웹 서버가 제공하는 서비스들(메서드)을 컨트롤 해서 값을 가져와야 합니다.
그러나 웹 서버는 원격에 있기 때문에 원격에 있는 메서드를 컨트롤 할 수 있는 방법이 필요하게 됩니다.
이 때, 사용되는 기술이 바로 원격 프로시져 라고 불리는 Remote Procedure Call(RPC) 입니다.
원격에 있는 메서드를 부른다는 뜻입니다. 여기에 객체라는 개념을 넣은 기술이 바로 Remote Method Invocation (RMI) 입니다.
원격에 있는 메서드를 불러서 데이터를 주고 받을 때 분산된 객체간에 메시지를 전송할 수 있습니다.
단, Java에서만 이용되기 때문에 클라이언트가 RMI를 쓸려면 원격에 있는 웹서버도 Java 환경의 RMI 형태로 주고 받을 수 있도록 서비스가 구성되어야 합니다.
그렇게 서비스 환경이 구성이 되었다면, RMI를 통해 원격 객체를 획득하기 위해 그 객체를 제공하는 Server가 어디에 있는 지를 알아야 합니다.
이때, Client 프로그램에서는 WSDL 주소나 WSDL문서를 통해 웹 서버에서 제공하는 서비스(메서드)의 endpoint 정보를 이용하게 됩니다.
또한, endpoint 정보 이외에도 송신하는 측과 수신하는 측이 서로 같은 메시지의 형식을 공유하기 위해서는 interface가 만들어져야 하는데 Server측에서는 관련 class들을 Object화 하여 객체 서비스를 제공하고 클라이언트 측에서는 그 interface를 implement 하여 클래스를 만들게 됩니다.
이후, 송신측은 자바 객체를 SOAP 메시지 형태로 변환하는 직렬화를 통해 값을 내보내고 수신측은 받은 SOAP 메세지 형태를 자바 객체로 바꾸는 역직렬화를 통하여 값을 이용하게 됩니다.
(RMI 방식에 대해 보다 자세한 내용은 웹 서비스 관련 서적 및 javax.xml.rpc.Service , java.rmi.Remote API 정보를 참조하기 바랍니다.)

웹서비스 클라이언트와 웹서버간의 흐름

Eclipse 제공하는 Web Service Client Wizard는 원격 메시지를 호출할 수 있는 RPC와 RMI 형태의 기본적인 소스를 자동으로 생성 및 셋팅을 해줍니다.
앞에서 새롭게 생성된 Class 와 라이브러리 들이 바로 그것입니다.
사용자는 그저 해당 Class 파일들을 이용하여 값을 출력하면 됩니다.
그럼 Client 에서 원격에 있는 웹서버가 제공하는 웹서비스를 호출 해서 전달 받은 값을 Java application 으로 출력해 보겠습니다. 먼저, 그림처럼 소스를 코딩 합니다.(소스는 첨부파일 참조)

소스 코딩화면

소스를 그림처럼 실행해 봅니다.

소스화면에서 오른쪽 마우스를 클릭후 Run As 선택후 2. Java Application을 실행한다.

결과 값이 제대로 출력되는 것을 확인 할 수 있습니다.

결과값 출력화면.

eclipse가 자동 생성해 주는 주요 Class 파일 및 함수들에 대해서 알아 보겠습니다.

▶ Locator 의 주요 역할 :
String type의 enpoint_address 값을 URL type endpoint로 변환.
그 변환된 endpoint 변수 값으로 Soap11BindingStub객체를 생성.

▶ Proxy 의 주요 역할 :
기본적으로 javax.xml.rpc.service.endpoint.address 로부터 endpoint_address값을 가져오고 enpoint_address값을 셋팅. Locator를 생성해서 get~HttpSoap11Endpooint() 함수를 호출하여 stub 객체를 만들도록 함.

▶ Stub 의 주요 역할 :
Locator로 부터 건내어 받은 URL타입의 endpoint 값으로 Client의 Stub를 만듦. initOperation에서 operation 명과 인자 값, 리턴 값 의 형태되로 SOAP 메시지를 만듦. 원격에 있는 웹 서비스를 Call 할 수 있는 객체를 생성.
initOperation 함수와 createCall함수를 이용하여 실제적인 웹 서비스 함수를 구현.

Web Service Client Wizard에서 추가된 class들 / Web service Client Wizaard에서 추가된 Bean Class들 설명.

예제 소스 설명

실제로 특허청에서 제공하는 웹 서비스 정보에 접근하기 위해서는 인증키 확인 절차가 필요하기 때문에 원격 메서드로 보낼 입력값을 SOAP 메시지 형태로 가공할 때 SOAPHeaderElement를 이용하여 SOAP 메시지의 header 부분에 해당하는 userId 와 userKey 키 값을 더해서 보내게 됩니다.
 
new SOAPHeaderElement("http://plus.kipris.or.kr","userId");
→ SOAP메시지에서 보여질 namespace와 localPart를 설정
id.setValue(_userId);
→ localPart 에 입력될 실제 userId 값
userKey.setValue(_userKey);
→ localPart 에 입력될 실제 userKey 값
stub.setHeader(id);
stub.setHeader(userKey);
→ SOAP 메시지 형태로 만들어진 header 부분을 메시지에 추가하는 부분

예제소스.

예제 소스 설명
앞서 설명했듯 웹서비스를 호출하게 되면 SOAP 메시지 형태의 결과 값들이 역직렬화 되어 Client의 Bean 클래스에 담기게 됩니다.
(이런 Client의 bean 형태는 Eclipse Wizard가 Wizard를 처음 실행할 때, endpoint 정보를 이용해서 원격에서 제공하는 서비스의 bean형태 대로 자동으로 생성됩니다.)
PatentBibliographicInfoServiceSoap11BindingStub Class는 그런 bean에 담긴 값들을 바로 가져와 쓸 수 있습니다. AgentInfo[] agentInfos = (AgentInfo[])stub.agentInfo("1019950700550"); 이렇게 stub 만 이용하면 곧바로 값을 출력할 수가 있습니다.

예제소스.

이제 실제 JSP 페이지에 뿌려줄 화면을 간략하게 만들어 보겠습니다.

이클립스 오른쪽 마우스 클릭, New 선택후 JSP 선택.

예제에서는 그림처럼 Web Content 밑에 index.jsp 파일이라는 이름으로 JSP페이지를 생성했습니다.

JavaServer Page에서 WebContent선택 후 파일이름을 index.jsp로 생성.

Finish를 눌러 JSP 파일을 생성하면 JSP 페이지 화면을 볼 수 있습니다.

생성된 index.jsp 화면

이제 index.jsp에 코드를 입력합니다. 소스 코드 내용은 첨부된 파일을 확인 바랍니다. 그리고 왼쪽에 추가된 스타일시트는 코드 내용과는 별개로 폰트와 테이블 디자인을 위해 몇 개 삽입하였습니다. (디자인은 개별 수정 바랍니다.)

코드입력 화면

주요소스설명( proxy와 stub을 통해서 값을 가져오기 위해 설정하는 부분과 인증키를 위한 SOAPHeaderElement 부분, 그리고 stub으로 가져온 값을 beans 배열에 담는 부분입니다.)

소스설명에 해당하는 화면

주요소스설명(배열에 값이 없을 때를 체크하기 위한 IF문 사용)

소스설명에 해당하는 화면

주요소스설명(배열이 여러 개인 경우 for문을 써서 값을 가져옵니다.)

소스설명에 해당하는 화면

코드작성이 완료되었으면, 프로젝트를 웹 서버에 올립니다.

프로젝트 선택후 오른쪽 마우스 클릭후 Run As 선택, 이 후 Run on server 실행

Server의 hostName 과 ServerName, Server runtime environment 설정을 다시 한번 확인합니다.

Run on Server 창

프로젝트명이 오른쪽 Configured projects 에 제대로 떠 있는지 확인하고 Finish를 눌러 완료 합니다.

Finish 선택화면

화면 하단에 다음과 같이 웹 서버가 정상적으로 Started 되었음을 확인할 수 있습니다.

이클립스 하단에 서버가 시작된 화면

하단에 있는 Console 탭을 눌러 에러가 발생하지 않았는지 확인 합니다.

이클립스 하단의 console 탭

에러가 발생하지 않았다면 프로젝트 명에 마우스 오른쪽 버튼을 누른 뒤 Properties를 선택합니다.

프로젝트 오른쪽 마우스 클릭후 Properties 선택

왼쪽 리스트에서 Web Project Settings를 선택하면, URL 상에서 웹 프로젝트에 접근하기 위한 ContextRoot명을 쉽게 확인할 수 있습니다.

Properties창에서 Web Project Settings를 선택한 화면

다음과 같이 Explorer 띄워 해당하는 주소를 입력하면 원하는 결과 값이 나오는 것을 확인할 수 있습니다.
기타: 다른 wsdl을 추가로 추가해야 할 상황이 발생하면 추가할 wsdl 주소로 별개의 라이브러리 소스 용 프로젝트를 새로 만들어서 프로젝트의 src 폴더 아래 파일들을 내가 사용할 프로젝트의 src 폴더에 복사해서 사용하실 수 있습니다.

결과화면
 
관련자료 다운로드
개발가이드
이전글 이전글이 없습니다
다음글 [개발가이드]Tool Kit