Apache Axis is an implementation of the SOAP ("Simple Object Access Protocol") submission to W3C.
본 강좌(팁)은 사용법을 위주로 아주 기초적인 예제를 다룰것이므로 자세한 내용은 생략한다.
WSDL (Web Service Description Langauge)
WSDD (Web Service Deployment Descriptor)
"웹서비스는 인터넷을 통해 제공되는 소프트웨어가 PC나 휴대폰과 같은 다중 기기에서 동일하게
작동하도록 해준다. 여기에는 데이터 교환의 표준이면서 경쟁 관계에 있는 기술들이 서로 통신하고
협동하도록 해주는 XML(Extensible Markup Language), 웹서비스 간에 어떻게 인터넷을 통해
교신하는지를 서술하는 SOAP(Simple Object Access Protocol), 웹서비스가 무엇이고 또 어떻게
접근할 수 있는지를 기술하는 WSDL(Web Services Description Language), 그리고
- 톰캣 5.5.4 버젼을 사용하였다. (참고로 Windows환경이다.)
설치후 http://localhost:8080으로 확인해서 동작이 되면 정상이다.
이것이 톰캣설치의 전부이고, jsp 및 servlet이 동작이되면 준비는 되었다.
필요에 따라 jdbc등 기타 드라이버를 c:\tomcat\common\lib\ 에 복사 한다. - set CATALINA_HOME=c:\tomcat
2. 자바 개발툴킷 설치 : JDK 1.4 버젼 이상이면 된다.
-
참고로 jdk 1.5 버젼을 설치하였다.
-
설치 후에 classpath를 설정한다.
set CLASSPATH=.;c:\jdk15\lib\tools.jar;c:\tomcat\common\lib\servlet-api.jar;
추가적으로 필요한 jdbc 및 기타 라이브러리들을 추가한다. -
set JAVA_HOME=c:\jdk15
set PATH=c:\jdk15\bin; 을 기존 PATH에 추가한다.
3. ANT 설치 (옵션) : ant에 대해서는 다른 문서나 커뮤니티 사이이트에서 참고할것.
-
set ANT_HOME=c:\ant
set PATH=c:\ant\bin; 을 기존 PATH에 추가한다. -
C:\tomcat\server\lib\catalina-ant.jar 파일을 c:\ant\lib\ 디렉토리로 복사한다.
-
추가적으로 junit 이나 xml관련 라이브러리등을 c:\ant\lib\ 에 복사하여 사용하면 된다.
4. AXIS 설치 : http://ws.apache.org/axis/ , http://ws.apache.org/axis/releases.html
-
axis 사이트에서 최신 릴리즈를 다운받아서 압축을 푼후에, 원하는 디렉토리에 옮겨놓으면 된다.
참고로 1.1 final version를 다운 받아서 사용중이다. -
set AXIS_HOME=c:\axis
-
set AXIS_LIB=%AXIS_HOME%\lib
-
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;
%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar;
%AXIS_LIB%\wsdl4j.jar -
set CLASSPATH=%CLASSPATH%;%AXISCLASSPATH% 으로 기존 CLASSPATH 에 추가한다.
-
참고 :
CLASSPATH에 있는 xml-apis.jar 파일과 xercesImpl.jar 파일은
http://xml.apache.org/ 에서 받으면 된다.
또한, 아래에서 보게 될 라이브러리 테스트를 통하여 추가 라이브러리를 확인할수 있고
확인후에 필요한 다운 사이트 정보까지 나오게 되므로 정보를 확인후 다시 설정해주면 된다.
5. axis를 톰캣에 연동하기
-
연동에 있어서 특별한 것은 없고 단지, c:\axis\webapps\axis\ 에서 axis디렉토리를
c:\tomcat\webapps\axis로 복사하면 된다. 즉, 톰캣 webapps디렉토리에 axis 컨텍스트가
추가 되었다고 이해해도 되겠다.
6. 테스트 해보기
-
톰캣을 실행하고
-
연결테스트를 해본다.
http://localhost:8080/axis -
라이브러리 테스트
http://localhost:8080/axis/happyaxis.jsp 에서 필요하거나 필수적인 추가 라이브러리를
설치하라는 경고 메시지를 보여주기 때문에 이때 필요한 라이브러리를 다운받아서
c:\tomcat\webapps\axis\lib\ 에 복사해주고 다시 테스트를 해본다.
필요에 따라서 다운받은 라이브러리를 CLASSPATH에 설정해주어서 jdk로 컴파일할때 이용하자.
7. SOAP 테스트
-
http://localhost:8080/axis/services/Version?method=getVersion
다음과 같이 출력되면 정상적으로 설치가 된것이다. (내용은 환경에 따라 약간 차이가 난다.)
<?xml version="1.0" encoding="UTF-8" ?>
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-
Apache Axis version: 1.1 Built on Jun 13, 2003 (09:19:43 EDT)
8. AdminClient 테스트
-
C:\axis\samples\stock 디렉토리로 이동하여 예제로 테스트해보자.
-
java org.apache.axis.client.AdminClient
-lhttp://localhost:8080/axis/services/AdminService deploy.wsdd -
deploy가 되었는지 확인하고, 에러가 나면 거의 대부분의 원인은 클래스패스에서 나온다.
-
deploy가 제대로 되었는지 확인해보자.
http://localhost:8080/axis/servlet/AxisServlet
아래처럼 추가된 부분이 웹에 보인다면 성공적으로 deploy된것이다.
urn:xmltoday-delayed-quotes (wsdl)
test
getQuote
9. Client 수행 테스트
-
java samples.stock.GetQuote -lhttp://localhost:8080/axis/servlet/AxisServlet -uuser1 -wpass1 XXX
실행결과가 55.25가 출력되면 성공이다.~~!!! -
실행시 클래스 패스 오류가 나면 GetQuote.java 파일을 편집기로 열어서 소스 윗부분의
package samples.stock 부분을 지우고 컴파일 하여
java GetQuote -lhttp://localhost:8080/axis/servlet/AxisServlet -uuser1 -wpass1 XXX
실행 해보면 정상적으로 나올것이다.
10. 프로그램 작성 순서
-
서버 Interface와 구현 Class를 작성한후 컴파일 한다.
-
구현 클래스로 부터 WSDL 파일을 생성한다.
-
WSDL 파일로 부터 deploy.wsdd 파일을 생성한다.
-
deploy.wsdd 파일을 이용해서 웹서비스를 deploy하고 server-config.wsdd 파일을 생성 수정한다.
-
구현클래스로 부터 client-side 클래스를 생성한다.
11. 프로그램 작성 플로우
12. 예제 프로그램
- 자바 Interface와 자바 Implement 클래스 작성
c:\test\ 에 아래 2개의 파일을 생성한다.
//begin - HelloIF.java
package webservice.hello;
public interface HelloIF extends java.rmi.Remote {
public String hello(java.lang.String name) throws java.rmi.RemoteException;
}
//end - HelloIF.java
//begin - HelloImpl.java
package webservice.hello;
public class HelloImpl implements HelloIF {
public HelloImpl() {
}
public String hello(String name) {
System.out.println(name);
return "hi " + name;
}
}
//end - HelloImpl.java - 컴파일
javac -d . HelloImpl.java
컴파일 후 c:\test\webservice/hello 디렉토리밑에 HelloImpl.class 와 HelloIF.class가 생성.
생성된 class파일을 C:\Tomcat\webapps\axis\WEB-INF\classes
디렉토리에 패키지 디렉토리를 포함해서 복사한다.
참고: 컴파일이 되지 않을경우, HelloIF.java파일을 먼저 컴파일한후에 c:\test\webservice/hello
디렉토리에 HelloIF.class파일을 복사해놓고 다시 컴파일 해본다. - 구현된 클래스로 부터 WSDL 생성 하기
java org.apache.axis.wsdl.Java2WSDL -o c:\test\webservice\hello\Hello.wsdl
-l http://localhost:8080/axis/services/Hello -n http://hello.webservice -pwebservice.hello
http://hello.webservice webservice.hello.HelloIF
Java2WSDL 인자 (http://ws.apache.org/axis/java/reference.html)
인 자의 미-o 파일경로 wsdl 생성 위치 -l URL client가 접속할 URL -n 네임스페이스 WSDL의 타켓 네임스페이스 -p패키지 네임스페이스 네임스페이스와 네임스페이스 매핑 Target 인터페이스 이름
[생성된 Hello.wsdl 파일]
<?xml version="1.0" encoding="UTF-8"?>
<?XML:NAMESPACE PREFIX = WSDL />...
...생략...
...
<?XML:NAMESPACE PREFIX = WSDLSOAP /> - WSDL 파일로 부터 deploy.wsdd 파일 생성 및 client-side 자바 클래스 생성
java org.apache.axis.wsdl.WSDL2Java -o c:\test\webservice\hello\
-d Application -s c:\test\webservice\hello\Hello.wsdl
c:\test\webservice\hello 디렉토리 하위에 webservice/hello
새로운 디렉토리가 생성된것을 확인 할수 있다.
그 디렉토리에 deploy.wsdd 파일과 새롭게 생성된 자바 파일이 존재해야 한다.
또한, undeploy.wsdd 파일도 생성 된 것을 볼수 있는데 이파일은 서비스를
undeploy할때 사용한다.
인 자의 미-o 디렉토리경로 wsdd 파일과 클래스파일이 생길 디렉토리 -d scope 설치 영역 - Application, Request , Session -s wsdd 파일 생성 Target wsdl 파일 경로 - [deploy.wsdd 파일 수정]
wsdd 파일은 wsdl 파일만 가지고 생성되었기 때문에 실제 구현클래스가 무엇인지 제대로
설정이 안되어 있으므로 그부분을 수정해 주어야한다.
붉은색 부분으로 해당 부분을 수정해주면 된다.
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
...
...생략...
...
webservice.hello.HelloImpl"/>
...
...생략...
... - 서비스 디플로이먼트 하기
java org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd
[디플로이먼트 확인하기]
http://localhost:8080/axis/servlet/AxisServlet
'Hello' 라는 서비스가 설치된것을 확인할 수 있다. - 서비스 언디플로이먼트 하기
java org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService undeploy.wsdd
[언디플로이먼트 확인하기]
http://localhost:8080/axis/servlet/AxisServlet
'Hello' 라는 서비스가 삭제 된것을 확인할 수 있다.
14. 클라이언트 구현하기
- 이제 생성된 서비스에 클라이언트로 접근해보는 예제를 생성하고 테스트 해보자.
아래와 같이 작성하고 c:\tomcat\webapps\axis\ 복사한다. - [HelloClient.jsp]
<%@ page contentType="text/html; charset=euc-kr" language="java"
import="java.net.MalformedURLException,
java.net.URL,
java.rmi.RemoteException,
javax.xml.namespace.QName,
javax.xml.rpc.ServiceException,
org.apache.axis.client.Call,
org.apache.axis.client.Service" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/Hello?wsdl"));
call.setOperationName(new QName("http://soapinterop.org/", "hello"));
String returnValue = (String)call.invoke(new Object[]{"! 안녕하세요.^^*"});
out.println(returnValue);
%> - http://localhost:8080/axis/hello.jsp
hi ! 안녕하세요.^^* - 위에서 처럼 나오면 성공이다. HelloClient.jsp부분하고 차이가 없는것 같지만
"! 안녕하세요" 와 "hi ! 안녕하세요" 차이가 크다.(구현하는 프로그램적으로...)
즉, hi 라고 출력되어지는 String hello() 웹 메소드를 HelloImpl.class에서 가져와서 실행하는 것이다.
14. 두번째 예제
- 첫번째 방법 외에 빠른 방법이 있다.
자바 파일을 만들고 확장자를 java가 아닌 jws로 바꾸고 실행하는 방법이다.
참고로 c:\tomcat\webapps\axis\WEB-INF\web.xml를 한번 검토해길 바란다. - [ HelloWorldService.jws]
public class HelloWorldService
{
public String HelloWorld(String data)
{
return "Hello World! You sent the string '" + data + "'.";
}
} - 위의 파일을 c:\tomcat\webapps\axis\ 에 복사하고
http://localhost:8080/axis/HelloWorldService.jws
그 주소에 설치된 서비스가 있다는 HTML 페이지가 나온다. 여기서 더나가 HelloWorld 메서드를 호출해보자.
http://localhost:8080/axis/HelloWorldService.jws?method=HelloWorld&data=Hi+my+name+is+okjsp
메서드를 호출한 결과 XML을 받았다. - 자바로 클라이언트 구현 하기
[ HelloWorldClient.java]
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;public class HelloWorldClient
{
public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException
{
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL("http://debianbox:8080/axis/HelloWorldService.jws"));
call.setOperationName(new QName("http://soapinterop.org/", "HelloWorld"));
String returnValue = (String)call.invoke(new Object[]{"My name is okjsp."});
System.out.println(returnValue);
}
} - HelloWorldClient.java 파일을 컴파일 하고 실행 해서 결과를 확인해 본다.
참고로 컴파일 에러가 나는 경우는 라이브러리등이 CLASSPATH에 잡혀있지 않아서 이다.
본 문서의 처음 부분에 있는 설정 부분을 확인해 보고 다시 시도 해보자.
15. 마치며
XML, SOAP, WSDL, WSDD, UDDI 그리고,
닷넷과 자바...[웹서비스]...
주로 제가 작업하는 환경이
닷넷에서 ASP.NET, C#, SQLXML(SQLServer), Delphi, Oracle 등 입니다.
리눅스로 서버를 자주 사용하는데, 리눅스에서 톰캣환경으로 jsp를 공부하던중에,
웹서비스 부분 구현이 답답했습니다.
http://www.okjsp.pe.kr에서 주로 공부하는데 soap등으로 검색을 해봐도
나중에 알게된 사실이지만 AXIS로 검색을 해봐도 글이 거의 없더군요.
그래서, 이곳 저곳 검색 하면서 apache-axis라는 프로젝트를 알게되었고,
공부를 시작하면서 정리 해두는 습관때문에 이렇게 문서를 만들게 되었습니다.
본 문서는 거의 대부분 인용 한 것 입니다.
[참고 사이트 및 자료]
http://www.apache.org
axis 에 포함된 관련 도큐먼트
거의 출처가 된 : http://blog.naver.com/inking007.do?Redirect=Log&logNo=120006999762
등등에서 참고한것 입니다. 특히 네이버 문서가 도움이 많이 되었습니다.
그리고, 무단 복제라고 이상하게 보지마시구요. 서로 정보 공유차원에서 이해해 주시길 바랍니다.
특히, 저같은 초보를 위해서...^^*
최근댓글