출처 : http://blog.daum.net/tomayoon/7091859
이번 강좌에서는 SOAP을 이용하여 간단한 예제를 통해 테스트해도록 하겠다.
참고 문헌은 http://xml.apache.org 에 있는 문서와
http://www.javaworld.com/javaworld/jw-04-2001/jw0427-soap_p.html을 바탕으로 설명하겠다.
1.SOAP의 설치
현재 다양한 vendor들이 SOAP를 제공하고 있다. 우리는 apache에서 만든 SOAP을 이용해서 테스트를 진행할 계획이다. 생각보다 세팅은 상당히 간단하다.
1) apache와 jakarta-tomcat을 먼저 설치하기 바란다. 이에 관한 문서는 많기 때문에 본 강좌에서는 다루지 않겠다.
2) http://xml.apache.org에서 soap을 다운받아 적당한 디렉토리에 압축을 푼다. 본 강좌에서는 E:\java\soap 디렉토리 아래에 압축을 푼것으로 생각하고 예제를 실행하겠다.
3) 압축을 푼 후에 E:\Java\soap\lib\soap.jar를 classpath에 추가해준다.
4) http://localhost:8080/soap아래에서 작업을 수행하기 위해 tomcat/conf/server.xml 을 열어 다음과 같은 내용을 추가한다.
<Context path="/soap"
docBase="e:/java/soap/webapps/soap"
debug="1"
reloadable="true">
</Context>
이 내용을 추가하게 되면 http://localhost:8080/soap은 e:/java/soap/webapps/soap에서 파일을 찾게 된다.
5) Apache SOAP는 Xerces1.1.2 version이상에서 테스트가 가능하다 그러므로 Xerces parser가 설치되어 있지 않거나 버전이 1.1.2이하인 분들은 http://xml.apache.org에서 다운받아 압축을 푼 후에 Xerces/xerces.jar파일을 classpath에 추가해주면 된다.
6) 테스트 시에 mail.jar API와 activation.jar API가 필요하므로 http://java.sun.com에서 다운받아 tomcat.bat파일에 이 파일들을 추가해준다.
if exist "%TOMCAT_HOME%\lib\mail.jar" set CP=%CP%;%TOMCAT_HOME%\lib\mail.jar
if exist "%TOMCAT_HOME%\lib\activation.jar" set CP=%CP%;%TOMCAT_HOME%\lib\activation.jar
7) 이제 제대로 설치가 되었는지 테스트 할 차례이다. Apache와 tomcat을 Start한 다음에 http://localhost:8080/soap을 테스트해보기 바란다. 그러면 Apache-SOAP이라는 제목의 화면이 보일 것이다. 각 link를 테스트해보기 바란다.
8) 만약 제대로 실행이 되지 않으면 xml parser상의 문제일수가 있다. 따라서 tomcat/lib안에 xml.jar(tomcat3.1) or parser.jar(tomcat3.2)버전이 1.0이기 때문이다. 따라서 이 화일들의 이름을 바꿔주기 바란다. (ex : zxml.jar or zparser.jar) 그리고 xerces.jar화일의 classpath가 제일 먼저 잡히도록 tomcat.bat에서 설정해 주어야 한다. 그런 제대로 실행이 될 것이다.
이상으로 모든 세팅을 마치고 소스화일을 통해서 예제를 실행해보도록하겠다.
모든 예제는 항상 그렇듯이 HelloWorld를 찍어보도록 하겠다.
1. Service source의 작성
package hello;
public class HelloServer{
public String sayHelloTo(String name){
System.out.println("sayHelloTo(String name)");
return "Hello " + name + ", How are you doing?";
}
}
2. HelloServer의 Deploy
1) Administration tool을 이용
http://localhost:8080/soap/admin/index.html을 실행하면 이 파일을 deploy할 수 있는 Tool이 제공된다. Deploy를 선택하면 값을 입력하는 화면이 보일 것이다.
위 HelloServer를 Deploy하기 위해 다음과 같이 선택한다.
l ID field : 이것은 object ID를 지정하는 고유한 이름이라고 생각하면 된다.
Urn:<UniqueServiceID>형태로 사용하면 된다.
이 예제에서는 ID field에 urn:Hello 라고 적겠다.
l Scope field : JSP에서 <jsp:useBean/>과 같이 사용할 때 나오는 scope과 같은 개념으로 이해하면 된다. 이 예제에서는 application으로 선택하겠다.
l Methods field : Deploy 되는 Object내에 정의된 method name을 적어 주는 것이다. 이 예제에서는 sayHelloTo가 된다. (Javaworld자료를 보면 sayHelloTo()라고 적혀 있는데 뒤에 ()가 없어야 제대로 수행된다.)
l Provider Type field : 사용될 language를 선택하는 곳으로 이 예제는 java를 선택하면 된다.
l Provider Class field : 이 field는 사용될 class의 이름을 적어주는 곳으로 이 예제에서는 hello package의 HelloServer class이다. 따라서 hello.HelloServer라고 해주면 된다.
l Static field : sayHelloTo() method가 static이 아니므로 no를 선택하면 된다.
l 그외 많은 field들이 있지만 이 예제에서는 이 정도만 입력해도 된다. 다른 field에 대해서는 다음강좌에서 더 자세하게 알아보도록 하겠다. 더 많은 걸 알고 싶은 분들은 http://xml.apache.org에서 soap d0cumentation을 참조하기 바란다.
l 이 모든 값들을 입력했다면 마지막으로 가장 아래에 있는 Deploy button을 click하면 된다. 그리고 List를 눌러보면 urn:Hello라는 이름을 가진 놈이 보일것이다.
2) Command line이용
Administration Tool을 이용하지 않고 Command상에서 Deploy할 수도 있다.
위 예제를 테스트하려면 다음과 같은 XML파일을 먼저 작성한다.
Apache-SOAP에서는 Command상에서 Deploy할 수 있도록 class파일을 제공한다.
Org.apache.soap.server.ServiceManagerClient class가 Deploy 작업을 수행한다. 이 작업을 위해서는 두개의 parameter가 꼭 필요하다. 첫번째는 Apache SOAP의 router의 URL과 XML deployment descriptor파일이다.
이 예제에서 rpcrouter의 위치는 http://localhost:8080/soap/servlet/rpcrouter이고 XML deployment descriptor는 다음과 같은 형식으로 작성하면 된다.
FileName = DeploymentDescriptor.xml
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:Hello">
<isd:provider type="java" scope="Application" methods="sayHelloTo">
<isd:java class="hello.HelloServer" static="false"/>
</isd:provider>
</isd:service>
이 파일 내용을 보면 우리가 Administration Tool을 사용할 때와 같은 정보를 담고 있음을 알 수 있다.
Deploy는 다음과 같이 한다.
Xml파일이 위치한 곳으로 이동하여 다음과 같이 실행한다.
java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter deploy DeploymentDescriptor.xml
과 같이 해주면 ServiceMangerClient가 Deploy작업을 수행한다.
Deploy가 제대로 수행되었는지 확인해 보기 위해서는 다음과 같이 해주면 된다.
java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter query urn:Hello
를 치면 DeploymentDescriptor.xml 과 같은 xml화일이 출력됨을 볼 수 있을 것이다.
위 둘중에 하나의 방법을 선택하여 Deploy작업을 수행하면 된다. 이제 HelloServer는 Service를 위한 모든 준비가 끝났다.
3. Client program 작성
package hello;
import! java.net.URL;
import! java.util.Vector;
import! org.apache.soap.*;
import! org.apache.soap.rpc.*;
public class Client{
public static void main(String[] args) throws Exception{
if(args.length==0){
System.err.println("Usage : java hell.Client {SOAP-router-URL}");
System.exit(1);
}
try{
URL url = null;
String name = null;
if(args.length == 2){
url = new URL(args[0]);
name = args[1];
}else{
url = new URL("http://localhost:8080/soap/servlet/rpcrouter");
name = args[0];
}
Call call = new Call();
call.setTargetObjectURI("urn:Hello");
call.setMethodName("sayHelloTo");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter("name", String.class, name, null));
call.setParams(params);
Response resp = null;
try{
resp = call.invoke(url, "");
}catch(SOAPException e){
System.err.println("Caught SOAPException (" + e.getFaultCode() + "):" + e.getMessage());
System.exit(-1);
}
if(!resp.generatedFault()){
Parameter ret =resp.getReturnValue();
Object value = ret.getValue();
System.out.println(value);
}else{
Fault fault = resp.getFault();
System.err.println("Generated fault : " );
System.out.println(" Fault Code = " + fault.getFaultCode());
System.out.println(" Fault String = " + fault.getFaultString());
}
}catch(Exception e){
System.out.println("Exception발생 : " + e.getMessage());
}
}
}
각각의 method, class에 대한 내용은 API를 참조하거나 SOAP사이트를 참조하기 바란다.
3. 결과 확인
길고긴 작업 끝에 이제 결과를 확인할 시간이 왔다.
이 파일들은 classpath가 잡혀있는 디렉토리에서 compile한다.
우리 예에서는 E:\java\soap까지 classpath를 잡고 테스트하겠다.
E:\java\soap아래에 두개의 java파일을 넣고 javac –d . filename.java or javac –d . *.java
를 수행하여 compile한다. 그러면 E:\java\soap아래에 hello라는 디렉토리가 생기고 그 안에 class파일들만 저장이 됩니다. 그 후에 E:\java\soap에서 다음과 같이 수행하면 됩니다.
java hello.Client ParkJaeSung 을 치면..
Hello ParkJaeSung, How are you doing? 이라는 글이 보이면 여러분은 SOAP의 세계로 들어온 겁니다. 이 내부에서는 이전 강좌에서 우리가 보았던 XML형태로 data를 주고 받아 결과를 뿌려주게 됩니다. Error화면을 보고 싶다면 Administration Tool에서 urn:Hello를 undeploy한 다음에 실행을 시켜보면 뭐라고 에러 화면이 뜰겁니다. 테스트에 꼭 성공하기를 빌면서..
질문은 다음으로 해 주세요
E-mail : SanJiGi@hotmail.com JavaJiGi@hotmail.com
ICQ : 115951472
www.javajigi.net의 XML Q&A
'웹서비스' 카테고리의 다른 글
SOAP 에서 첨부파일 전송하기 (0) | 2010.07.07 |
---|---|
Tomcat을 이용하여 SOAP 설정 (0) | 2010.07.07 |
SOAP 메세지 암호화 하기 (0) | 2010.07.07 |
SOAP 와 XMLHTTP를 사용한 응용프로그램 사용하기 (0) | 2010.07.07 |
본문스크랩] 2.웹 서비스를 이용한 이기종간 오브젝트 전달 (0) | 2010.07.07 |