25
SOAP 실실실실 Internet Computing Laboratory @ KUT http://icl.kut.ac.kr Youn-Hee Han

SOAP 실전예제 Internet Computing Laboratory @ KUT Youn-Hee Han

Embed Size (px)

Citation preview

Page 1: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

SOAP 실전예제

Internet Computing Laboratory @ KUThttp://icl.kut.ac.kr

Youn-Hee Han

Page 2: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

2

웹 서비스 구현 절차

원격 인터페이스 및 Java Bean 작성 (BookStoreIF.java)

서비스 구현 클래스 작성 (BookStoreImpl.java)

인터페이스 정의 파일 작성 (config-interface.xml)

자바 파일 컴파일과 WSDL 및 mapping 파일 생성

배치 기술자 작성(Deployment Descripter)

web.xml, sun-web.xml, webservices.xml

WAR 파일 생성

배포 및 WSDL 확인

초기 작업 – 디렉토리 설정

Page 3: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

3

초기 작업J2EE 설치 및 실행 확인

실행 및 종료방법 cmd 창에서 asadmin start-domain domain1 cmd 창에서 asadmin stop-domain domain1

실행확인 http://localhost:8080/ http://localhost:4848/

작업 디렉토리 생성 서비스 root 디렉토리

D:/SOAPExample/BookService/server

서비스 src 및 war 디렉토리 D:/SOAPExample/BookService/server/src D:/SOAPExample/BookService/server/war

클라이언트 root 디렉토리 D:/SOAPExample/BookService/client

클라이언트 src 및 build 디렉토리 D:/SOAPExample/BookService/client/src D:/SOAPExample/BookService/client/build

Page 4: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

4

원격 인터페이스 및 Java Bean 작성

원격 인터페이스package bookservice;

import java.rmi.*;import java.util.*;

public interface BookServiceIF extends Remote { public String registerBook1(String title, int price) throws RemoteException; public String registerBook2(String title[], int price[]) throws RemoteException; public HashMap getBooks() throws RemoteException;}

D:/SOAPExample/BookService/server/src/BookServiceIF.java

Client: 점원Client: 점원 Server: 책관리 웹서비스시스템Server: 책관리 웹서비스시스템

제목 , 가격 registerBook1(String, int)

제목 , 가격 제목 , 가격 registerBook2(String[], int[])

getBooks()Book 리스트 요청

Page 5: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

5

서비스 구현 클래스 작성

서비스 구현 클래스 – 1/2

package bookservice;

import java.util.*;

public class BookServiceImpl implements BookServiceIF { private HashMap bookList;

public BookServiceImpl() { bookList = new HashMap(); }

public String registerBook1(String title, int price) { bookList.put(title, price); String result = " 입력완료 ! - [" + title + ", " + price + "]"; return result; }

D:/SOAPExample/BookService/server/src/BookServiceImpl.java

Page 6: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

6

서비스 구현 클래스 작성

서비스 구현 클래스 – 2/2

public String registerBook2(String titles[], int price[]) { String result = " 입력완료 ! - "; for(int i=0; i<titles.length; i++) { bookList.put(titles[i], price[i]); result += "[" + titles[i] + ", " + price[i] + "] "; } return result; }

public HashMap getBooks() { return bookList; }}

D:/SOAPExample/BookService/server/src/BookServiceImpl.java

Page 7: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

7

인터페이스 정의 파일 작성

인터페이스 정의 파일

<?xml version="1.0" encoding="UTF-8" ?>

<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">

<service name="BookService" targetNamespace="http://localhost:8080"

typeNamespace="http://localhost:8080"

packageName="bookservice">

<interface name="bookservice.BookServiceIF" />

</service>

</configuration>

D:/SOAPExample/BookService/server/config-interface.xml

스스로 서비스 이름을 정함

Java 패키지명

Java 패키지명을 포함한 원격 인터페이스 이름

Page 8: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

8

자바 파일 컴파일과 WSDL 및 mapping 파일 생성

wsbuild.bat 생성

rem ***************************************************************rem This file should be executed in the Web Service Root Directory.rem rem The Web Service Root Directory should have the followings:rem 1) src directory which has the all *.java files:rem 2) config-interface.xmlrem ***************************************************************mkdir warcd warmkdir buildmkdir WEB-INFcd WEB-INFmkdir classesmkdir wsdlcd ../..

javac -d war/WEB-INF/classes src/*.java

wscompile -define -d war/WEB-INF/wsdl -mapping war/build/mapping.xml -classpath war/WEB-INF/classes config-interface.xml

D:/SOAPExample/BookService/server/wsbuild.bat

Page 9: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

9

자바 파일 컴파일과 WSDL 및 mapping 파일 생성

컴파일 및 WSDL/mapping 파일 생성 webuild.bat 수행 전 파일 배치 모습

cmd 창에서 wsbuild.bat 수행 D:/SOAPExample/BookService/server/ 에서

수행 wsbuild.bat 수행 이후 war 디렉토리

구성 모습

BookService server src BookServiceIF.java BookServiceImpl.java war config-interface.xml wsbuild.bat

BookService server src BookServiceIF.java BookServiceImpl.java war build

mapping.xml WEB-INF

classes bookservice BookServiceIF.class BookServiceImpl.classwsdl BookService.wsdl

config-interface.xml wsbuild.bat

Page 10: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

10

배치 기술자 작성

web.xml 작성 war/WEB-INF 밑에 저장

10

<?xml version="1.0" encoding="UTF-8" ?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>BookService</display-name> <servlet> <servlet-name>BookServiceImpl</servlet-name> <servlet-class>bookservice.BookServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>BookServiceImpl</servlet-name> <url-pattern>/bookservice</url-pattern> </servlet-mapping></web-app>

D:/SOAPExample/BookService/server/war/WEB-INF/web.xml

반드시 일치

Java 패키지명을 포함한 서비스 구현 클래스 이름

서비스 접근 URL 에 영향스스로 이름을 정함

Page 11: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

11

배치 기술자 작성

sun-web.xml 작성 war/WEB-INF 밑에 저장

11

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd"><sun-web-app> <context-root>bookws</context-root> <servlet> <servlet-name>BookServiceImpl</servlet-name> <webservice-endpoint> <port-component-name>BookServiceIF</port-component-name> <endpoint-address-uri>bookservice</endpoint-address-uri> </webservice-endpoint> </servlet></sun-web-app>

D:/SOAPExample/BookService/server/war/WEB-INF/sun-web.xml

web.xml 에 있는 내용과 반드시 일치

스스로 이름을 정함 , 서비스 접근 URL 에 영향

web.xml 에 정의한 url-pattern 과 일치

원격 인터페이스 이름

Page 12: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

12

배치 기술자 작성

webservices.xml 작성 war/WEB-INF 밑에 저장

12

<?xml version="1.0" encoding="UTF-8" ?> <webservices xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"> <webservice-description> <display-name>BookService</display-name> <webservice-description-name>BookService</webservice-description-name> <wsdl-file>WEB-INF/wsdl/BookService.wsdl</wsdl-file> <jaxrpc-mapping-file>build/mapping.xml</jaxrpc-mapping-file> <port-component> <display-name>BookServiceIF</display-name> <port-component-name>BookServiceIF</port-component-name> <wsdl-port xmlns:wsdl-port_ns__="http://localhost:8080">wsdl-port_ns__:BookServiceIFPort</wsdl-port> <service-endpoint-interface>bookservice.BookServiceIF</service-endpoint-interface> <service-impl-bean> <servlet-link>BookServiceImpl</servlet-link> </service-impl-bean> </port-component> </webservice-description></webservices>

D:/SOAPExample/BookService/server/war/WEB-INF/webservices.xml

Page 13: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

13

WAR 파일 생성

WAR 파일 생성 cmd 창에서 war 디렉토리로 옮김 다음 명령 수행

jar –cvf BookService.war .

현재까지의 파일 배치 모습

BookService server src BookServiceIF.java BookServiceImpl.java war build

mapping.xml WEB-INF

classes bookservice BookServiceIF.class BookServiceImpl.classwsdl BookService.wsdl

sun-web.xmlweb.xmlwebservices.xml

BookService.war config-interface.xml wsbuild.bat

Page 14: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

14

배포 및 WSDL 확인

배포 (deploy) 생성된 BookService.war 파일을 다음 디렉토리에 Copy

D:\Sun\SDK\domains\domain1\autodeploy

아래 그림처럼 BookService.war_deployed 라는 파일이 생성됨을 확인

WSDL 확인 브라우저에서 다음 URL 로

생성된 WSDL 확인 http://localhost:8080/bookws/bookservice?WSDL

Page 15: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

15

웹 서비스 클라이언트 구현 절차

초기 작업 – 디렉토리 설정

config.xml 및 스텁 클래스 생성 (wscompile)

클라이언트 프로그램 작성

코드 컴파일

클라이언트 실행

Programmer 가 수행할 일

클라이언트코드 작성

WSDL 문서로부터스텁 클래스 생성소스 코드 컴파일

실행

XML Web ServicesServer

WSDL

XML Web ServicesStub 객체

클라이언트 root 디렉토리 D:/SOAPExample/BookService/client

클라이언트 src 및 build 디렉토리D:/SOAPExample/BookService/client/srcD:/SOAPExample/BookService/client/build

Page 16: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

16

스텁 클래스 생성

config.xml 생성

wscompile 을 이용한 스텁 생성 cmd 창에서 D:/SOAPExample/BookService/client 디렉토리로

이동 다음의 명령을 수행

wscompile –gen:client –d build config.xml

build/bookclient 디렉토리에 생성된 스텁 확인

<?xml version="1.0" encoding="UTF-8"?><configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">

<wsdl location="http://localhost:8080/bookws/bookservice?WSDL" packageName="bookclient"/></configuration>

D:/SOAPExample/BookService/client/config.xml

Page 17: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

17

클라이언트 프로그램 작성

클라이언트 프로그램 작성 – 1/2

package bookclient;

import javax.xml.rpc.*;import java.util.*;

public class BookServiceClient { public static void main(String[] args) { try { BookService_Impl bookService = new BookService_Impl(); BookServiceIF bookIF = (BookServiceIF)bookService.getBookServiceIFPort();

String result1 = bookIF.registerBook1("XML 기초와 실무 ", 29000); System.out.println(result1);

String titles[] = new String[] {"Java", "C++", "C#"}; int prices[] = new int[] {30000, 25000, 27000}; String result2 = bookIF.registerBook2(titles, prices); System.out.println(result2);

D:/SOAPExample/BookService/client/src/BookServiceClient.java

Page 18: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

18

클라이언트 프로그램 작성

클라이언트 프로그램 작성 – 2/2

System.out.println("- Current Book List -"); HashMap bookList = bookIF.getBooks(); Iterator t_titles = bookList.keySet().iterator(); while (t_titles.hasNext()) {

String title = (String)t_titles.next();System.out.println(title + " : " + bookList.get(title));

} } catch (Exception ex) {

ex.printStackTrace(); } }}

D:/SOAPExample/BookService/client/src/BookServiceClient.java

Page 19: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

19

컴파일 및 실행컴파일

cmd 창에서 D:/SOAPExample/BookService/client 로 이동 다음 명령어 수행

javac -d build –cp build;D:\Sun\SDK\lib\javaee.jar;d:\Sun\SDK\lib\appserv-ws.jar src\*.java

실행 D:/SOAPExample/BookService/client 에서 여전히 수행 다음 명령어 수행

java -cp build;d:\Sun\SDK\lib\j2ee.jar;d:\Sun\SDK\lib\appserv-ws.jar bookclient.BookServiceClient

Page 20: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

20

JavaEE 5 이후의 웹서비스 개발 방법새로운 폴더 생성

서비스 root 디렉토리 D:/SOAPExample/Hello2Service/server

서비스 src 및 war 디렉토리 D:/SOAPExample/Hello2Service/server/src

서버 소스 개발

package hello2service;

import javax.jws.WebService;

@WebServicepublic class Hello2 { public String getHello(String name) { return "Hello " + name + "!"; }}

D:/SOAPExample/Hello2Service/server/src/Hello2.java

Page 21: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

21

JavaEE 5 이후의 웹서비스 개발 방법컴파일

D:/SOAPExample/Hello2Service/server 에서 다음 명령 수행 javac -d D:\Sun\SDK\domains\domain1\autodeploy –cp D:\Sun\SDK\

lib\javaee.jar src\*.java

웹서비스 확인 브라우저에서 http://localhost:4848 로 접속

설치시 입력한 ID, Passwd 입력 Web Services 목록 확인

Page 22: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

22

JavaEE 5 이후의 웹서비스 개발 방법WSDL 확인

(1)

(2)

(3)

WSDL URL 확인

Page 23: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

23

JavaEE 5 이후의 웹서비스 개발 방법Book2Service 를 위한 새로운 폴더 생성

서비스 root 디렉토리 D:/SOAPExample/Book2Service/server

서비스 src 및 war 디렉토리 D:/SOAPExample/Book2Service/server/src

서버 소스 개발

package book2service;

import java.util.*;import javax.jws.WebService;

@WebServicepublic class Book2Service { private List bookList; public Book2Service() { bookList = new LinkedList(); } // 이하 BookServiceImpl.java 와 동일

D:/SOAPExample/Book2Service/server/src/Book2Service.java

Page 24: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

24

JavaEE 5 이후의 웹서비스 개발 방법컴파일

D:/SOAPExample/Book2Service/server 에서 다음 명령 수행 javac -d D:\Sun\SDK\domains\domain1\autodeploy –cp D:\Sun\SDK\

lib\javaee.jar src\*.java

웹서비스 확인 브라우저에서 http://localhost:4848 로 접속

설치시 입력한 ID, Passwd 입력 Web Services 목록 확인

Page 25: SOAP 실전예제 Internet Computing Laboratory @ KUT  Youn-Hee Han

25

JavaEE 5 이후의 웹서비스 개발 방법WSDL 확인

(1)

(2)

(3)

WSDL URL 확인