IT/Programming

Apache AXIS를 이용한 웹서비스 강좌

Jany 2009. 3. 16. 18:18
반응형
AXIS에 대한 자료가 많지 않은데요.. 참 정리가 잘 된 문서인 것 같습니다. 시키는 대로 테스트를 하다 보니.. 웹서비스의 개념이 어느정도 잡히는 듯 합니다. 좋은 자료라 공유해봅니다. 참고하세요~~)

 
Apache AXIS를 이용한 웹서비스 강좌(팁)
개요 : 톰캣(자바)환경에서 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)
"웹서비스는 인터넷을 통해 제공되는 소프트웨어가 PC나 휴대폰과 같은 다중 기기에서 동일하게
작동하도록 해준다. 여기에는 데이터 교환의 표준이면서 경쟁 관계에 있는 기술들이 서로 통신하고
협동하도록 해주는 XML(Extensible Markup Language), 웹서비스 간에 어떻게 인터넷을 통해
교신하는지를 서술하는 SOAP(Simple Object! Access Protocol), 웹서비스가 무엇이고 또 어떻게
접근할 수 있는지를 기술하는 WSDL(Web Services Description Language), 그리고
온라인 전화번호부의 역할을 수행하면서 기업들로 하여금 웹서비스를 등록, 홍보, 검색할 수
있도록 하는 UDDI(Universal Description, Discovery andIntegration) 등이 포함된다."

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
    다음과 같이 출력되면 정상적으로 설치가 된것이다. (내용은 환경에 따라 약간 차이가 난다.)

    - 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 수행 테스트

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 파일]


    ...
    ...생략...
    ...







  • 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    <== 포트번호를 80등으로 바꿀경우는 꼭 이와같은 행태로 -l옵션을 주어서 드플로이 해야만 한다.

    [디플로이먼트 확인하기]
    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. 다른 시스템과 연동하기

SOAP로 운영되고있는 서버 시스템과 연동을 한다고 하면 먼저 해당 시스템에 wsdl을 알아야만 한다.

SOAP서버 운영자로부터 wsdl을 볼수있는 url이나 .wsdl파일을 요청하도록한다.

그렇게 해서 받은 wsdl파일을  첨부된pdf 파일에서 언급된 WSDL2Java 명령을 이용하여 java파일들을 생성하게 된다.

이렇게 생성된 java파일들을 통해 바로 써버쪽에서 써비스와 연결할 수 있는 정보들을 알수있다.

즉,서버쪽에서 AxisServlet에 등록된 모듈에 대한 인터페이스 관련 파일들인것임.

이 java파일들을 이용해서 첨부파일 예제인 FactClientByWSDL.java파일과 같이 client 파일을 만들어 실행시키면 서버와  연결하여 데이터를 받을 수 있게된다.

물론 client 파일 실행시에는 해당 FactClientByWSDL.java 파일과 WSDL2Java 명령으로 생성된 자바파일이 패키지화 되어 있어야 참조하여 실행이 될것이고 axis관련된 jar파일들도 classpath에 참조가 되어야 할것이다

반응형