AXIS2 웹 서비스 튜토리얼

Apache Axis2 튜토리얼에 오신 것을 환영합니다. 최근에 저는 Apache Axis2 기술을 1.3 버전에서 최신 버전인 1.5.4로 업그레이드하려고 시도했지만, 최신 릴리스에 대해 자체 설명이 되고 최신 내용을 다루는 튜토리얼을 찾을 수 없었습니다. 그래서 이 글은 Axis2 웹 서비스 튜토리얼의 기초가 됩니다.

Apache Axis2 튜토리얼

누가 이 튜토리얼을 사용해야 할까요?

이 튜토리얼은 Apache Axis2를 사용하여 웹 서비스를 개발하고 배포하려는 Java 프로그래머를 대상으로 합니다.

전제 조건

이 튜토리얼의 범위는 Axis2를 사용하여 웹 서비스를 만들고 Java 클라이언트 프로그램을 통해 웹 서비스를 호출하고, Soap UI 도구를 사용하여 웹 서비스를 테스트하는 것입니다. Java, 웹 서비스, XML, Ant 및 애플리케이션 서버 (Tomcat)의 기본적인 이해는 튜토리얼을 쉽게 이해하기 위해 필요합니다.

소프트웨어 및 도구 사용

  1. Java 개발 키트 (JDK) 1.6.0 (Tomcat 7는 최소 JDK 1.6이 필요합니다)
  2. Apache Ant 1.7.0 (Axis2는 최소 버전 1.6.5를 필요로 합니다)
  3. Apache Axis2 1.5.4 (바이너리 배포)
  4. Eclipse 3.6.1 IDE for 프로젝트 개발 (NetBeans 등 다른 IDE를 사용할 수도 있습니다)
  5. Apache Tomcat 7.0.8
  6. 웹 서비스를 테스트하기 위한 SoapUI.
  7. Mac OS X 10.6.4 (저는 Mac OS에서 작업 중이지만 이 튜토리얼은 다른 운영 체제에서도 작동해야 하지만 명령을 실행하는 데 일부 변경이 필요할 수 있습니다)

시스템 설정

  1. 최신 버전의 아파치 톰캣을(를) 다운로드하십시오. 현재로서는 최신 버전이 7.0.8이며, 이것이 이 튜토리얼에서 사용하는 버전입니다. 최소 Java 버전 1.6이 필요하므로 시스템에 설치되어 있는지 확인하십시오. 시스템에 Java 6이 설치되어 있지 않은 경우 Java SE Downloads에서 먼저 다운로드하여 설치해야 합니다. Tomcat Core zip (apache-tomcat-7.0.8.zip)을 다운로드하여 시스템에 설치하십시오. 서버를 시작하고 중지하려면 JAVA_HOME 환경 변수를 설정하십시오.

  2. 아파치 Axis2 1.5.4 이진 배포 zip을 아파치 Axis2 – 릴리스에서 다운로드하십시오. 이 단계는 tomcat에 배포될 axis2.war를 생성하고 프로젝트에서 사용할 axis2 라이브러리를 가져오기 위해 필요합니다.

  3. Axis2 이진 배포 zip을 편리한 디렉터리로 압축 해제하세요. axis2-1.5.4/webapp 디렉터리로 이동한 다음 “ant create.war” 명령을 실행하여 axis2-1.5.4/dist 디렉터리에 axis2.war 배포를 생성합니다. Apache Ant가 설치되어 있지 않은 경우 Apache Ant – Binary Distributions에서 다운로드하여 설치할 수 있습니다. War Distribution에서 다운로드한 axis2.war에서 문제가 발생했습니다. 나중에 알게 된 것은 axis2 War Distribution에 일부 jar 파일이 누락되어 있다는 것입니다. War Distribution에는 58개의 jar만 포함되어 있지만 이진 배포에는 63개의 jar가 포함되어 있습니다. (어떤 jar 파일이 누락되었는지 찾기 귀찮습니다.)

    $ ant create.war
    Buildfile: build.xml
    
    init:
        [mkdir] Created dir: /Users/pankaj/Downloads/axis2-1.5.4/dist/temp
          Copying 59 files to /Users/pankaj/Downloads/axis2-1.5.4/dist/temp
    
    prepare.repo:
          Copying 9 files to /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF
        [mkdir] Created dir: /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf
          Copying 1 file to /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf
    
    create.war:
          [war] Building war: /Users/pankaj/Downloads/axis2-1.5.4/dist/axis2.war
       [delete] Deleting directory /Users/pankaj/Downloads/axis2-1.5.4/dist/temp
    
    BUILD SUCCESSFUL
    Total time: 2 seconds
    
  4. axis2.war를 tomcat 웹 애플리케이션 서버에 배포하려면 tomcat webapps 디렉터리에 복사하십시오. 핫 배포를 지원하지 않는 경우 서버를 다시 시작해야 할 수 있습니다.

  5. https://localhost:8080/axis2/로 이동하여 확인 링크를 클릭하십시오. Happy Axis 페이지가 GREEN 색상으로 나타나면 axis2가 성공적으로 배포된 것입니다. 시스템 설정이 준비되었으며 이제 Axis2 웹 서비스를 생성할 수 있습니다.

Axis2 웹 서비스 생성

Axis2 웹 서비스 아카이브를 생성하려면 다음이 필요합니다:

  1. A Java Project (Axis2WSImplementation) with a class that will be exposed as a web service. In my example, I am exposing two operations from MyService class. The first operation getData input is String and returns String whereas the second operation getObjectData input is MyBean java object and returns MyBean java object after some data manipulation. Note that MyBean class implements Serializable interface so that it can be transferred over the network.
  2. Ant build.xml 파일. 이 파일은 aar, wsdl 및 클라이언트 측 스텁 및 콜백 핸들러 클래스를 생성하는 데 사용됩니다.
  3. services.xml 파일. 이 파일은 axis2 아카이브의 META-INF 폴더에 넣을 것입니다.

프로젝트 구조는 아래 이미지와 같이 보일 것입니다. build 폴더 내용에 혼란스러워하지 마십시오. 이들은 build.xml Ant 파일을 실행할 때 생성됩니다.

Axis2 웹 서비스 프로젝트 설명

MyService.java: Axis2 웹 서비스로 노출될 구현 클래스.

package com.journaldev.ws;

import com.journaldev.bean.MyBean;

public class MyService {

	public String getData(String input) {
		return "Hi" + input;
	}

	public MyBean getObjectData(MyBean myBean) {

		String name = myBean.getName();
		int id = myBean.getId();
		myBean.setId(id + 100);
		myBean.setName("Output: " + name);

		return myBean;
	}
}

MyBean.java: 웹 서비스의 getObjectData 작업의 입력 및 출력으로 사용되는 Java Bean 클래스.

package com.journaldev.bean;

import java.io.Serializable;

public class MyBean implements Serializable {

	private static final long serialVersionUID = -1129402159048345204L;

	private String name;

	private int id;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

}

services.xml: Axis2 웹 서비스 관련 매개변수가이 xml 파일의 일부입니다. ServiceClass 매개변수는 웹 서비스로 노출 될 클래스를 지정합니다. 다른 중요한 매개변수는 targetNamespaceschemaNamespace입니다. services.xml

<service name="MyService" scope="application" targetNamespace="https://journaldev.com/">
 <description>
 MyService
 </description>
 <messageReceivers>
 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 </messageReceivers>
 <schema schemaNamespace="https://journaldev.com/xsd"/>
 <parameter name="ServiceClass">com.journaldev.ws.MyService</parameter>
</service>

build.xml: Axis2 작업 수행을위한 Ant 빌드 파일입니다. 세 가지 대상이 정의되어 있으며 세부 정보는 다음과 같습니다:

  1. generate.wsdl: 이 대상은 build 폴더에 MyService.wsdl 파일을 생성합니다. targetNamespace 및 schemaTargetNamespace이 service.xml 파일과 동일한지 확인하십시오.
  2. generate.service: 이 대상은 build 폴더에 axis2 아카이브를 생성합니다. 아카이브에는 services.xml 파일이 포함되어 있으며 아카이브 이름은 MyService.aar입니다.
  3. generate.client: 이 대상은 클라이언트 측 클래스를 생성합니다. generate.wsdl을 실행한 후에이 대상을 실행하여 MyService.wsdl 파일이 build 폴더에있는지 확인하십시오.

build.xml

<project name="AxisWSImplementation" basedir="." default="generate.service">

 <property environment="env"/>
 <property name="build.dir" value="build"/>

 <path id="axis2.classpath">
 <fileset dir="${basedir}/lib">
 <include name="*.jar"/>
 </fileset>
 </path>

 <target name="compile.service">
 <mkdir dir="${build.dir}"/>
 <mkdir dir="${build.dir}/classes"/>
 <mkdir dir="${build.dir}/resources"/>
 <!--First let's compile the classes-->
 <javac debug="on"
 fork="true"
 destdir="${build.dir}/classes"
 srcdir="${basedir}/src"
 classpathref="axis2.classpath">
 </javac>
 </target>

 <target name="generate.wsdl" depends="compile.service">
 <taskdef name="java2wsdl"
 classname="org.apache.ws.java2wsdl.Java2WSDLTask"
 classpathref="axis2.classpath"/>
 <java2wsdl className="com.journaldev.ws.MyService"
 outputLocation="${build.dir}"
 targetNamespace="https://journaldev.com/"
 schemaTargetNamespace="https://journaldev.com/xsd">
 <classpath>
 <pathelement path="${axis2.classpath}"/>
 <pathelement location="${build.dir}/classes"/>
 </classpath>
 </java2wsdl>
 </target>

 <target name="generate.service" depends="compile.service">
 <copy toDir="${build.dir}/classes" failonerror="false">
 <fileset dir="${basedir}/resources">
 <include name="**/*.xml"/>
 </fileset>
 </copy>
 <jar destfile="${build.dir}/MyService.aar">
 <fileset excludes="**/Test.class" dir="${build.dir}/classes"/>
 </jar>
 </target>

 <target name="generate.client" depends="compile.service">
 <taskdef name="wsdl2java"
 classname="org.apache.axis2.tool.ant.AntCodegenTask"
 classpathref="axis2.classpath"/>
 <wsdl2java
 wsdlfilename="${build.dir}/MyService.wsdl"
 output="${build.dir}/resources" />
 </target>

 <target name="clean">
 <delete dir="${build.dir}"/>
 </target>
</project>

WSDL, Axis 아카이브 및 Stub 파일 생성

  • MyService.wsdl 파일을 생성하려면 generate.wsdl Ant 대상을 실행하십시오.
  • MyService.aar 파일을 생성하려면 generate.service Ant 대상을 실행하십시오.
  • Stub 클래스를 생성하려면 generate.client Ant 대상을 실행하십시오.

Axis2 웹 서비스 배포

MyService.aar을 ~apache-tomcat-7.0.8/webapps/axis2/WEB-INF/services 디렉토리에 복사합니다. Axis2는 서비스의 핫 배포를 지원하므로 서버를 다시 시작할 필요가 없습니다. ListServices 페이지(https://localhost:8080/axis2/services/listServices)에서 서비스 배포를 확인하십시오. MyService는 두 개의 작업과 함께 나열되어야합니다.

Axis2 웹 서비스 테스트

서비스를 배포 한 후, 우리는 먼저 그것을 테스트해야합니다. 여기서 나는 웹 서비스 테스트를위한 최고의 도구 중 하나 인 SoapUI를 사용하고 있습니다. 만약 당신이 그것을 갖고 있지 않다면, 당신은 그것을 그들의 웹 사이트에서 다운로드하고 쉽게 설치할 수 있습니다. SoapUI를 사용한 테스트 단계

  1. 새로운 SoapUI 프로젝트를 만들고 프로젝트 이름을 MyServiceTest로 지정하세요(원하는 이름을 지정할 수 있습니다). 초기 WSDL/WADL은 https://localhost:8080/axis2/services/MyService?wsdl을 사용하세요(MyService 링크를 클릭한 후 Axis2 List Services 페이지에서 이 URL을 얻을 수 있습니다). 다른 옵션은 기본값으로 두고 OK 버튼을 클릭하여 SoapUI 테스트 프로젝트를 만드세요.
  2. Soap 바인딩 중 하나를 선택하고 getData 및 getObjectData SOAP 요청을 두 번 클릭하세요.

요청에 대한 입력 값 몇 가지를 제공하고 웹 서비스 엔드포인트 URL로 제출하세요. 서비스로부터 아래 이미지와 유사한 출력을 받아야 합니다. 이는 웹 서비스가 정상적으로 작동 중임을 확인하는 것입니다.

이제 Axis2 스텁 클래스를 사용하여 웹 서비스를 호출하는 마지막 작업을 진행하겠습니다.Axis2 스텁 파일을 사용한 웹 서비스 호출

  1. Eclipse에서 Java 프로젝트 Axis2Client를 생성하세요.
  2. lib 폴더를 만들고 다운로드한 이진 배포 lib 폴더에서 모든 Axis2 jar 파일을 복사하세요. 이러한 jar 파일을 프로젝트의 빌드 패스에 추가하세요.
  3. 이전에 생성된 MyServiceStub.javaMyServiceCallbackHandler.java를 올바른 패키지 구조로 프로젝트 src에 복사하십시오. 저의 경우에는 com.journaldev 패키지에 복사했습니다. 이 클래스들을 다른 사람에게 제공해야 한다면, 이들을 수정하지 않도록 jar로 만들어 다른 사람들과 함께 배포하는 것을 강력히 권장합니다.
  4. Axis2ClientUsingStubsFromAnt 클라이언트 클래스를 만들어 웹 서비스 작업을 호출하십시오. 프로젝트 구조는 아래 이미지와 유사하게 보일 것입니다.

Axis2ClientUsingStubsFromAnt 코드

package com.journaldev.ws.client;

import java.rmi.RemoteException;

import com.journaldev.MyServiceStub;
import com.journaldev.MyServiceStub.GetData;
import com.journaldev.MyServiceStub.GetDataResponse;
import com.journaldev.MyServiceStub.GetObjectData;
import com.journaldev.MyServiceStub.GetObjectDataResponse;
import com.journaldev.MyServiceStub.MyBean;

/**
 *
 * @author Pankaj - www.journaldev.com This class will invoke Axis2 web service
 *         operations using Stub classes
 *
 */
public class Axis2ClientUsingStubsFromAnt {

	/**
	 * END_POINT is the web service endpoint
	 */
	private final static String END_POINT = "https://localhost:8080/axis2/services/MyService";

	public static void main(String[] args) throws RemoteException {
		System.out.println("START");

		// 웹 서비스 엔드포인트 URL을 전달하여 Stub 객체를 생성하십시오
		MyServiceStub stub = new MyServiceStub(END_POINT);

		// getData 작업에 대한 입력 객체를 생성하십시오
		GetData getDataInput = new GetData();

		// getData 입력 객체에 입력 부분을 설정하십시오
		getDataInput.setInput("PANKAJ");

		// getData 작업을 호출하십시오
		GetDataResponse getDataOutput = stub.getData(getDataInput);

		// get_return 메소드는 웹 서비스 출력 객체를 반환합니다. 여기서는
		// String이므로, 우리는
		// 직접 반환된 값을 출력할 수 있습니다
		System.out.println("Output:" + getDataOutput.get_return());

		// getObjectData 작업에 대한 입력 객체를 생성하십시오
		GetObjectData getObjectDataInput = new GetObjectData();
		MyBean myBean = new MyBean();
		myBean.setId(1);
		myBean.setName("KUMAR");

		// getObjectData 입력 객체에 입력 부분을 설정하십시오
		getObjectDataInput.setMyBean(myBean);

		// getObjectData 작업을 호출하십시오
		GetObjectDataResponse getObjectDataOutput = stub
				.getObjectData(getObjectDataInput);

		// 응답 객체에서 MyBean 객체를 가져오십시오
		MyBean myBeanOutput = getObjectDataOutput.get_return();

		// 웹 서비스 작업이 호출되고 있는지 확인하기 위해 myBeanOutput 값을 출력하십시오
		
		System.out.println("ID:" + myBeanOutput.getId() + "NAME:"
				+ myBeanOutput.getName());

		System.out.println("DONE");

	}

}

Axis2ClientUsingStubsFromAnt 클래스를 실행하여 웹 서비스를 호출하십시오. 위 프로그램의 출력은 다음과 같습니다:

START
log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
Output:HiPANKAJ
ID:101NAME:Output: KUMAR
DONE

{
“error”: “Upstream error…”
}

Source:
https://www.digitalocean.com/community/tutorials/axis2-web-services-tutorial