250 likes | 644 Views
SOAP 실전예제. Internet Computing Laboratory @ KUT http://icl.kut.ac.kr Youn-Hee Han. 웹 서비스 구현 절차. 초기 작업 – 디렉토리 설정. 원격 인터페이스 및 Java Bean 작성 (BookStoreIF.java). 서비스 구현 클래스 작성 (BookStoreImpl.java). 인터페이스 정의 파일 작성 (config-interface.xml). 자바 파일 컴파일과 WSDL 및 mapping 파일 생성. 배치 기술자 작성
E N D
SOAP 실전예제 Internet Computing Laboratory @ KUT http://icl.kut.ac.kr Youn-Hee Han
웹 서비스 구현 절차 초기 작업 – 디렉토리 설정 원격 인터페이스 및 Java Bean 작성 (BookStoreIF.java) 서비스 구현 클래스 작성 (BookStoreImpl.java) 인터페이스 정의 파일 작성 (config-interface.xml) 자바 파일 컴파일과 WSDL 및 mapping 파일 생성 배치 기술자 작성 (Deployment Descripter) web.xml, sun-web.xml, webservices.xml WAR 파일 생성 배포 및 WSDL 확인
초기 작업 • 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
원격 인터페이스 및 Java Bean 작성 • 원격 인터페이스 • D:/SOAPExample/BookService/server/src/BookServiceIF.java 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; } Client: 점원 Server: 책관리 웹서비스시스템 제목, 가격 registerBook1(String, int) 제목, 가격 제목, 가격 registerBook2(String[], int[]) getBooks() Book 리스트 요청
서비스구현 클래스 작성 • 서비스 구현 클래스 – 1/2 • D:/SOAPExample/BookService/server/src/BookServiceImpl.java 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; }
서비스구현 클래스 작성 • 서비스 구현 클래스 – 2/2 • D:/SOAPExample/BookService/server/src/BookServiceImpl.java 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/config-interface.xml <?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> Java 패키지명 스스로 서비스 이름을 정함 Java 패키지명을포함한 원격 인터페이스 이름
자바 파일 컴파일과 WSDL 및 mapping 파일 생성 • wsbuild.bat 생성 • D:/SOAPExample/BookService/server/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.xml rem *************************************************************** mkdir war cd war mkdir build mkdir WEB-INF cd WEB-INF mkdir classes mkdir wsdl cd ../.. 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
자바 파일 컴파일과 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.class wsdl BookService.wsdl config-interface.xml wsbuild.bat
배치 기술자 작성 • web.xml 작성 • war/WEB-INF 밑에 저장 • D:/SOAPExample/BookService/server/war/WEB-INF/web.xml <?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> 반드시 일치 Java 패키지명을포함한 서비스 구현 클래스 이름 서비스 접근 URL에 영향 스스로 이름을 정함 10
배치 기술자 작성 • sun-web.xml 작성 • war/WEB-INF 밑에 저장 • D:/SOAPExample/BookService/server/war/WEB-INF/sun-web.xml <?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> web.xml에 있는 내용과 반드시 일치 원격 인터페이스 이름 web.xml에 정의한 url-pattern과 일치 스스로 이름을 정함, 서비스 접근 URL에 영향 11
배치 기술자 작성 • webservices.xml 작성 • war/WEB-INF 밑에 저장 • D:/SOAPExample/BookService/server/war/WEB-INF/webservices.xml <?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> 12
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.class wsdl BookService.wsdl sun-web.xml web.xml webservices.xml BookService.war config-interface.xml wsbuild.bat
배포및 WSDL 확인 • 배포 (deploy) • 생성된 BookService.war 파일을 다음디렉토리에 Copy • D:\Sun\SDK\domains\domain1\autodeploy • 아래그림처럼 BookService.war_deployed 라는 파일이 생성됨을 확인 • WSDL 확인 • 브라우저에서다음 URL로 생성된 WSDL 확인 • http://localhost:8080/bookws/bookservice?WSDL
웹 서비스 클라이언트 구현 절차 • 클라이언트 root 디렉토리 • D:/SOAPExample/BookService/client • 클라이언트 src 및 build 디렉토리 • D:/SOAPExample/BookService/client/src • D:/SOAPExample/BookService/client/build 초기 작업 – 디렉토리 설정 config.xml 및 스텁 클래스 생성 (wscompile) 클라이언트 프로그램 작성 Programmer가 수행할 일 XML Web Services Server 클라이언트 코드 작성 코드 컴파일 WSDL WSDL 문서로부터 스텁 클래스 생성 소스 코드 컴파일 클라이언트 실행 Stub 객체 XML Web Services 실행
스텁 클래스 생성 • config.xml 생성 • wscompile을 이용한 스텁생성 • cmd 창에서 D:/SOAPExample/BookService/client 디렉토리로 이동 • 다음의 명령을 수행 • wscompile –gen:client –d build config.xml • build/bookclient디렉토리에 생성된 스텁 확인 • D:/SOAPExample/BookService/client/config.xml <?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>
클라이언트 프로그램 작성 • 클라이언트 프로그램 작성 – 1/2 • D:/SOAPExample/BookService/client/src/BookServiceClient.java 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);
클라이언트 프로그램 작성 • 클라이언트 프로그램 작성 – 2/2 • D:/SOAPExample/BookService/client/src/BookServiceClient.java 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(); } } }
컴파일및 실행 • 컴파일 • 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
JavaEE 5 이후의 웹서비스 개발 방법 • 새로운 폴더 생성 • 서비스 root 디렉토리 • D:/SOAPExample/Hello2Service/server • 서비스 src 및 war 디렉토리 • D:/SOAPExample/Hello2Service/server/src • 서버 소스 개발 • D:/SOAPExample/Hello2Service/server/src/Hello2.java package hello2service; import javax.jws.WebService; @WebService public class Hello2 { public String getHello(String name) { return "Hello " + name + "!"; } }
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 목록 확인
JavaEE 5 이후의 웹서비스 개발 방법 • WSDL 확인 (2) (1) WSDL URL 확인 (3)
JavaEE 5 이후의 웹서비스 개발 방법 • Book2Service 를 위한 새로운 폴더 생성 • 서비스 root 디렉토리 • D:/SOAPExample/Book2Service/server • 서비스 src 및 war 디렉토리 • D:/SOAPExample/Book2Service/server/src • 서버 소스 개발 • D:/SOAPExample/Book2Service/server/src/Book2Service.java package book2service; import java.util.*; import javax.jws.WebService; @WebService public class Book2Service { private List bookList; public Book2Service() { bookList = new LinkedList(); } // 이하 BookServiceImpl.java와 동일
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 목록 확인
JavaEE 5 이후의 웹서비스 개발 방법 • WSDL 확인 (2) (1) WSDL URL 확인 (3)