프로그래밍/웹서비스
Chapter 5 Web Service Sample Program - 1
라제폰
2008. 12. 13. 19:40
Chapter 5 Web Service Sample Program
1. JAX-RPC Web Service Sample
시스템 환경 변수에 JWSDP_HOME을 설정한다.
시스템 환경 변수 PATH에 [%JWSDP_HOME%jwsdp-sharedbin]을 추가한다.
지원하는 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.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 메서드를 가져야 한다.
서비스 엔드포인트 인터페이스는 다음의 몇 가지 규칙을 지켜야 합니다.
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를 지원하는지를 꼭 확인 하십시오.)