본문 바로가기

웹서비스

SOAP을 이용하여 간단한 예제

출처 : 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