2011년 5월 24일 화요일

Chapter 5 Web Service Sample Program - 1

Chapter 5 Web Service Sample Program


1. JAX-RPC Web Service Sample
http://java.sun.com에 가서 JWSDP 최신 버전을 다운받아 설치 한다.
시스템 환경 변수에 JWSDP_HOME을 설정한다.
시스템 환경 변수 PATH에 [%JWSDP_HOME%jwsdp-sharedbin]을 추가한다.

JAX-RPC에서 지원하는 타입
지원하는 J2se 타입
java.lang.Boolean
java.lang.Byte
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String
java.math.BigDecimal
java.math.BigInteger
java.net.URI
java.util.Calendar
java.util.Date


지원하는 java.util.Colleciton 타입
인터페이스
구현 클래스
List
ArrayList
LinkedList
Stack
Vector
Map
HashMap
Hashtable
Properties
TreeMap
Set
HashSet
TreeSet


Primitives(boolean, byte, double, float, int, long, short), Arrays 타입

다음과 같은 규칙을 지키면 사용자 타입을 지원 할 수 있습니다.
    • 디폴트 생성자를 반드시 가진다.
    • java.rmi.Remote 인터페이스를 구현 하면 안 된다.
    • 모든 필드는 반드시 JAX-RPC에서 지원하는 타입이어야 한다.
    • 모든 public 필드는 final 또는 transient 이면 안 된다.
    • public 필드가 아닌 것은 반드시 getter와 setter 메서드를 가져야 한다.


Coding the Service Endpoint Interface and Implementation Class

서비스 엔드포인트 인터페이스는 다음의 몇 가지 규칙을 지켜야 합니다.
1. java.rmi.Remote 인터페이스를 확장하여야 한다.
2. 어떠한 public final static 도 선언할 수 없다.
3. 모든 메서드는 java.rmi.RemoteException 이나 이에 subclasses 중 하나를 선언해야 합니다.
4. 메서드의 리턴 타입이나 파라미터는 JAX-RPC에서 지원하는 타입이어야 합니다.

Web Service Sample Code
Value Object
package wsSample;
import java.io.Serializable;
public class User implements Serializable {
protected int age;
protected java.lang.String name;
public User() {
}
public User(int age, java.lang.String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public java.lang.String getName() {
return name;
}
public void setName(java.lang.String name) {
this.name = name;
}
}


Interface
package wsSample;
public interface UserInfoIntf extends java.rmi.Remote {
public User getUser(java.lang.String string_1, int int_2) throws
java.rmi.RemoteException;
}


Service Class
package wsSample;
public class UserInfo implements UserInfoIntf {
private User member = new User();
public User getUser(String name, int age) {
member.setName(name);
member.setAge(age);
return member;
}
}


아래와 같은 명령어로 위 3개의 파일을 컴파일해서 “WEB-INF/classes” 밑에 위치하게 한다.
“javac –d ../WEB-INF/classes *.java”

/WEB-INF/web.xml
<?xml version = '1.0' encoding = 'EUC-KR'?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
</web-app>

특별한 내용이 없는 “web.xml”파일을 만든다.

/WEB-INF/jaxrpc-ri.xml
<?xml version='1.0' encoding='EUC-KR'?>
<webServices
version="1.0"
xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/dd"
targetNamespaceBase="http://localhost:8888/hello/webservice/wsdl"
typeNamespaceBase="http://localhost:8888/hello/webservice/type">
<endpoint
name="webservice"
interface="wsSample.UserInfoIntf"
implementation="wsSample.UserInfo"/>
<endpointMapping
endpointName="webservice"
urlPattern="/webservice"/>
</webServices>

타이 클래스 및 WSDL 문서를 자동으로 생성하기 위해서 RMI interface 배치 기술자인 jaxrpc-ri.xml 문서를 작성합니다. 이 문서에는 원격 인터페이스 및 구현 클래스의 정보가 기술됩니다.
다음 명령어로 WAR 파일을 생성합니다.

“jar cvf WSHello-Before.war WEB-INF”

생성된 WAR 파일을 웹서비스 디플로이 툴을 이용하여 타이 클래스 및 WSDL 문서를 자동으로 생성합니다. 웹서비스 디플로이 툴은 JWSDP팩의 “JARXRPC/bin” 디렉토리가 페스에 잡혀 있어야 하며, 시스템에 설치된 JDK 위치가 “JAVA_HOME”의 이름으로 설정 되어 있어야 합니다.
“wsdeploy –o WSHello.war WSHello-Before.war”
등록된 WAR 파일을 웹 컨테이너에 배포합니다.(배포되는 컨테이너가 JAX-PRC를 지원하는지를 꼭 확인 하십시오.)

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...