Upload
judith-grace-mcdowell
View
220
Download
1
Embed Size (px)
Citation preview
SOAP 실전예제
Internet Computing Laboratory @ KUThttp://icl.kut.ac.kr
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 확인
초기 작업 – 디렉토리 설정
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
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 리스트 요청
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
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
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 패키지명을 포함한 원격 인터페이스 이름
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
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
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 에 영향스스로 이름을 정함
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 과 일치
원격 인터페이스 이름
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
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
14
배포 및 WSDL 확인
배포 (deploy) 생성된 BookService.war 파일을 다음 디렉토리에 Copy
D:\Sun\SDK\domains\domain1\autodeploy
아래 그림처럼 BookService.war_deployed 라는 파일이 생성됨을 확인
WSDL 확인 브라우저에서 다음 URL 로
생성된 WSDL 확인 http://localhost:8080/bookws/bookservice?WSDL
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
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
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
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
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
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
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 목록 확인
22
JavaEE 5 이후의 웹서비스 개발 방법WSDL 확인
(1)
(2)
(3)
WSDL URL 확인
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
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 목록 확인
25
JavaEE 5 이후의 웹서비스 개발 방법WSDL 확인
(1)
(2)
(3)
WSDL URL 확인