2. Eclipse -> Window -> Preferences -> Web Services -> Axis2 Preferences에서
Axis2 디렉토리를 설정합니다. (없으신 분은 다운받으셔야 합니다.)
http://axis.apache.org/axis2/java/core/download.cgi
3. Project를 선택하시고 -> Properties -> Proejct Facets에서 Axis2 Web Service를 체크해 줍니다.
4.Axis2를 구축하려면 wsdl가 있어야 되는데 필자는 이클립스에서 기본적으로 제공하는 wsdl를 가지고 테스트를 해 보겠습니다. 개발적으로 가장 밑바탕이 되는건 역시 간단한 sample를 가지고 테스트를 하는거니까요.
Target Name은 http://service.soap.co/ 을 입력해 줍니다. (패키지명 반대)
5. 자 이제 생성된 wsdl를 가지고 jax-ws용 Object를 생성해 보도록 하겠습니다.
명령어는 wsimport wsdl파일명 -p 패키지명 -keep -Xnocompile 입니다.
6. 생성된 Object를 src로 복사하여 옮겨 주도록 합시다.
7. Tomcat 기동옵션 추가
java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String;
Exception 의 원인은 Axis2는 JAX-WS 2.2를 지원하며 JDK 6도 JAX-WS 2.0까지 지원을 하지만 JDK 6이 먼저
classLoder가 되기 때문에 Tomcat 기동옵션에 JDK 6의 클래스보다 Axis2의 JAX-WS 2.2가 먼저 기동 되도록
기동옵션을 수정해 줍니다.
Axis2 디렉토리에 있는 geronimo-jaxws_2.2_spec-1.0.jar 파일을 C:\apache-tomcat-6.0.36\endorsed에 복사하여
Tomcat 기동옵션에 다음과 같이 추가해줍니다.
Djava.endorsed.dirs="C:\apache-tomcat-6.0.36\endorsed"
package co.soap.service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.soap.SOAPException;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding;
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.1.6 in JDK 6
* Generated source version: 2.1
*
*/
@WebService(name = "sample", targetNamespace = "http://service.soap.co")
@XmlSeeAlso({
ObjectFactory.class
})
@BindingType(value = SOAPBinding.SOAP11HTTP_BINDING)
public interface Sample {
/**
*
* @param in
* @return
* returns java.lang.String
* @throws SOAPException
*/
@WebMethod(operationName = "NewOperation", action = "http://service.soap.co/NewOperation")
@WebResult(name = "out", targetNamespace = "")
@RequestWrapper(localName = "NewOperation", targetNamespace = "http://service.soap.co", className = "co.soap.service.NewOperation")
@ResponseWrapper(localName = "NewOperationResponse", targetNamespace = "http://service.soap.co", className = "co.soap.service.NewOperationResponse")
public String newOperation(
@WebParam(name = "in", targetNamespace = "")
String in) throws SOAPException;
}
8. 구축된 Object를 이용하여 Service를 할 Class를 만들어 주셔야 합니다.
Sample.java를 보시면 Interface기 때문에 이 Interface를 이용하여 implements 할
class를 만들어 주셔야 합니다.
리턴될 형태가 String이기 때문에 간단한 메세지를 적어서 return 해 주도록 합시다.
package co.soap.service;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.soap.SOAPException;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding;
@WebService(endpointInterface = "co.soap.service.Sample", serviceName = "sample", portName="sampleSOAP", targetNamespace = "http://service.soap.co", wsdlLocation = "/wsdl/sample.wsdl")
@BindingType(value = SOAPBinding.SOAP11HTTP_BINDING)
public class SampleService implements Sample {
@Override
public String newOperation(
@WebParam(name = "in", targetNamespace = "") String in) throws SOAPException{
String result = null;
result = "Soap Axis2 Return Success !!";
return result;
}
}
10. Tomcat를 기동하여 줍니다.
11. 기동된 localhost/프로젝트를 보시면 아래와 같이 service가 등록된 것을 확인하실 수 있을 겁니다.
12. http://localhost:8080/soapAxis2/services/sample?wsdl
wsdl가 생성되는 것을 확인합니다.
13. SoapUI (Soap 테스트 유틸)을 기동하여 방금 생성된 http://localhost:8080/soapAxis2/services/sampleImpl?wsdl를 붙여 넣어 테스트를 해 봅니다.
14. 아래와 같이 코딩한 메세지가 리턴되면 성공하신 것을 보실 수 있을 겁니다.
출처:http://choyeonseop.blogspot.kr/2013/04/soap-axis2-eclipse-axis2jax-ws.html
'CXF,WSDL,JAXB' 카테고리의 다른 글
developerWorks 기술모음 - 웹서비스 (0) | 2014.03.18 |
---|---|
[ SPRING] CXF 를 이용한 WebService 구현 2 (0) | 2014.03.18 |
[ SPRING ] CXF 를 이용한 WebService 구현 1 (1) | 2014.03.18 |
Jersey를 이용한 REST의 구현 및 SOAP UI를 이용한 테스트 (0) | 2014.03.18 |
REST 란? (0) | 2014.03.18 |
Apache CXF Restful (0) | 2014.03.18 |
이클립스를 활용한 WSDL webservice 개발 (0) | 2014.03.18 |