2008년 3월 5일 수요일

AXIS User Guide..

Apache AXIS를 이용한 웹서비스




Apache Axis is an implementation of the SOAP ("Simple Object Access Protocol") submission to W3C.

아래의 내용은 중요하므로 기본 개념이 분명이 있어야 한다.
본 강좌()은 사용법을 위주로 아주 기초적인 예제를 다룰것이므로 자세한 내용은 생략한다.

SOAP (Simple Object Access Protocol)
WSDL (Web Service Description Langauge)
WSDD (Web Service Deployment Descriptor)

1. Apache Tomcat 4.1 이상 , Full Version으로 설치

·         톰캣 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에 대해서는 다른 문서나 커뮤니티 사이이트에서 참고할것.

·         http://ant.apache.org에서 ant 1.6.2 버젼을 받아서 설치한다.
설치는 다운 받은 파일을 압축을 풀어서 일정한 디렉토리에 옮겨놓으면 된다.

·         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" ?>
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <getVersionResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<getVersionReturn xsi:type="xsd:string">Apache Axis version: 1.1 Built on Jun 13, 2003 (09:19:43 EDT)
</getVersionReturn>
</getVersionResponse>
</soapenv:Body>
</soapenv:Envelope>

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"?>
<wsdl:definitions targetNamespace="http://hello.webservice"
...
...
생략
...
...
<wsdl:service name="HelloIFService">
<wsdl:port name="Hello" binding="impl:HelloSoapBinding">
<wsdlsoap:address location="http://localhost:8080/axis/services/Hello"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

·         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 파일만 가지고 생성되었기 때문에 실제 구현클래스가 무엇인지 제대로

설정이 안되어 있으므로 그부분을 수정해 주어야한다
.
붉은색 부분으로 해당 부분을 수정해주면 된다
.

<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
...
...
생략
...
...
<parameter name="className" value="
webservice.hello.HelloImpl"/>
...
...
생략...
...
<parameter name="allowedMethods" value="hello"/>
<parameter name="scope" value="Application"/>
</service>
</deployment>

·         서비스 디플로이먼트 하기

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'
라는 서비스가 삭제 된것을 확인할 수 있다.

13. 클라이언트 구현하기

·         이제 생성된 서비스에 클라이언트로 접근해보는 예제를 생성하고 테스트 해보자.
아래와 같이 작성하고 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" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>
웹서비스 테스트 : Hello World!</title>
</head>
<body>
<%
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);
%>
</body>
</html>

·         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://localhost: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 그리고,
닷넷과 자바...[웹서비스
]...

[참고 사이트 및 자료]
http://www.apache.org
에서 axis 에 포함된 관련 도큐먼트 및 기타 커뮤니티 참조
본 문서는 거의 대부분 인용 한 것 입니다.

댓글 없음:

댓글 쓰기